Soru IOS StoryBoard çoklu Segue bir TableCell'den


Merhaba, bir storyboard'um var ve bir tablo hücresine tıkladığınızda bir ayrıntı görünümü gösterebiliyorum. Ek işlevsellik eklemek istiyorum, böylece hangi hücreye bağlı olduğumu bağlı olarak farklı bir görüntü denetleyicisi göstereceğim. Aynı hücreden iki seferi sürüklemeye çalıştım ama buna izin vermiyor.

Düşüncem, hücrenin her seferinde farklı bir görüşe işaret eden iki segue alacağımı ve daha sonra istediğim seferi çağırdığımı:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

    NSInteger row = indexPath.row;
    NSLog(@"Selected Item :-) %@",[NSString stringWithFormat:@"%@",[myData objectAtIndex:row]]);
    if(row %2 ==0){
        NSLog(@"Even");        
        [self performSegueWithIdentifier:@"ShowSecondIndex" sender:self];
    }else{
        [self performSegueWithIdentifier:@"ShowSelectedMovie" sender:self];
        NSLog(@"Odd");

    }

} 

Daha sonra, hazırlamasında fandistasyonu halledebilirim

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{

    NSLog(@"Prepare For Segue ID:%@",[segue identifier]);

    if([[segue identifier] isEqualToString:@"ShowSelectedMovie"]){
        Tab2_ItemViewController *vc = [segue destinationViewController];
        NSInteger selectedIndex = [[self.tableView indexPathForSelectedRow] row];
        NSLog(@"Selected Index: %d",selectedIndex);
        [vc setSelectedItem: [NSString stringWithFormat:@"%@",[myData objectAtIndex:selectedIndex]]];
        NSLog(@"String Value: %@",[NSString stringWithFormat:@"%@",[myData objectAtIndex:selectedIndex]]);
        [vc setSelectedIndex:selectedIndex];


    }else if([[segue identifier] isEqualToString:@"ShowSecondIndex"]){

        NSLog(@"Viewing Second Index");
    }

}

Ancak, ikinci görünümü asla göstermez. Bunun nedeni, tek bir masa hücresinden iki seferi olmaması mümkün değil. Ayrıca kontrolörden her hedefe hücrenin birinden ve bir kontrolörden ziyade her hedefe sürüklenmeyi denedim ama şanssız kaldım ???


45
2018-01-12 15:49


Menşei


@casperOne - Bunu neden kapattın? Soruyu anlamıyorsanız, görmezden gelin. Bu, Storyboard'ları kullanmaya çalışan kişilerle ÇOK ortak bir sorudur. Lütfen kapatmayın. - Adam
Tamamen kabul edildi. Elbette bu kaza ile kapandı mı? Lütfen kapatmayın. - Tim
Aynen. Bu muhtemelen yanlışlıkla kapatıldı. - Jean-Denis Muys


Cevaplar:


Bu durumda Segues'i bir tableviewcell'e bağlamaya çalışmayın. Onları Görünüm Kontrolörüne bağla.


63
2018-01-12 16:18



Bunu denedim ama hala şans yok, sadece görüşlerden biri çağrıldı - Bear
Bunun çalışması gerekiyor. Bunu her zaman yaparım. Bu VC'ye sahip olduğunuz Görevlileri şimdi silin ve her segue VC'nin kendisine bağlı olduğundan emin olun. Daha sonra [self performSegueWithIdentifier: @ "segueID" gönderenini arayabilirsin: nil]; didSelectRowAtIndexPath üzerinde. - LJ Wilson
Tatlı! Görüş kontrolcüsünden segue alabileceğini bilmiyordum, sadece bir düğme ya da benzeri gibi gidebileceğini düşündüm. :) Ben şimdi biraz daha hoşlanıyorum beğeniyorum. - DonnaLea
Bu cevabı biraz çözebilir misin? Bir yorumdan biraz daha fazlası. - casperOne
Ne demek istiyorsun? Bunu, benim yaptığımdan başka bir şekilde açıklamanın başka bir yolu olduğunu sanmıyorum. - LJ Wilson


Bir TableCell'den diğer görüntü denetleyicilerine birden fazla cimnastik oluşturmaya çalışmayın, ctrl + storyboard arabirimindeki görünüm denetleyicisinin altındaki denetleyici simgesinden, görüntülemek istediğiniz görüntüleme denetleyicilerine sürükleyin. Daha sonra birden fazla seferi ayarlamanıza izin verecektir.

screenshot showing multiple segues 

ve daha sonra seferi işe almak için, kendileri üzerine tıklayarak ve daha sonra mülk müfettişinde bir isim vererek yapabileceğiniz, kendilerine sefikler için tanımlayıcılar eklemeniz gerekir:

giving segue an identifier 

sonra, UITableViewDelegate öğesinde, TableCells örneğinde,

-tableView:didSelectRowAtIndexPath: 

kullanabilirsiniz

- (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender 

segue'nin seçilmesi gereken kendi mantığınıza bağlı olarak bir seguei manuel olarak başlatmak için.


42
2017-07-25 04:50



Bu, Storyboard'larla Arayüz Oluşturucu'nun süper sezgisel olmadığı için üstün bir cevaptır. Tıkladığınız yeri nerede kontrol edeceğinizi bilmek itibaren Anahtar mı :) - smoothlandon
Bunu IB'de nasıl yapacağınızı açıkladığınız için teşekkür ederiz! - kjw0188


İşte demo projemden örnek bir kod:

-         (void)tableView:(UITableView *)tableView
  didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *segueName = nil;

    if (type == kCore) {
        segueName = @"segue1";
    } else if (type == kStdlib) {
        segueName = @"segue2";
    }

    [self performSegueWithIdentifier: segueName sender: self];
}

type hangi segue'nin gerçekleştirileceğini belirleyen bir denetleyici özelliğidir.

Yukarıdaki yanıtın dediği gibi, anahtar iki görüntü denetleyicisini bağlayarak segue oluşturmaktır.


4
2017-09-13 00:12





Hızlı bir şekilde 3.1, iki durumun bir segment kontrolü ile

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
var segue: String!
if selectedSegment == 0 {
    segue = "segue1"
} else  {
    segue = "segue2"
}
self.performSegue(withIdentifier: segue, sender: self)

}


1
2018-05-18 07:26