24

3 farklı görünüm 3 segues var. 2 problemsiz olarak uygulanmaktadır, üçüncüsü problemlerin ortaya çıkmasıdır.prepareForSegue daha önce çağırdı didSelectRowAtIndexPath sadece üçüncü segue eklendiğinde

Ben şu didSelectRowAtIndexPath yöntemi:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 
    NSLog(@" ---------- did select row"); 

    if(indexPath.section == 0){ 
     if(indexPath.row == [self.data count]-1){ 
      //prior to adding this, everything works 
      [self performSegueWithIdentifier:@"MoreComments" sender:self]; 
     }else{ 
      [self performSegueWithIdentifier:@"FriendView" sender:friend]; 
     } 
    }else if(indexPath.section == 1){ 
     if(indexPath.row == [self.data2 count]-1){ 
      [self performSegueWithIdentifier:@"MorePosts" sender:self]; 
     }else{ 
      [self performSegueWithIdentifier:@"FriendView" sender:friend]; 
     } 
    } 
} 

Ben şu prepareForSeque yöntemi:

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 
    if([segue.identifier isEqualToString:@"MorePosts"]){ 
     MorePostsViewController *mfamvc = segue.destinationViewController; 
     mfamvc.data = self.data; 
    }else if([segue.identifier isEqualToString:@"FriendView"]){ 
     FriendViewController *fvc = segue.destinationViewController; 
     fvc.friend = friend; 
    }else if([segue.identifier isEqualToString:@"MoreComments"]){ 
      MoreCommentsViewController *mcvc = segue.destinationViewController; 
      mcvc.data = self.data2; 
    } 
} 

son görünümüne hücreme sürükleyerek kontrol önce programımın didselectrow vurur görebilirsiniz ve sonra forseque hazırlamak. Bu, tüm manzara navigasyon çalışmalarını mükemmel hale getirir.

En kısa zamanda MoreCommentsViewController benim hücreden sürükle kontrol gibi ben hatayı görmeye başlar:

iç içe basma animasyon beklenmedik bir durumda bir gezinti geçişi Sonlandırılıyor bozuk gezinme çubuğunda neden olabilir. Gezinme Çubuğu alt görünümü ağacı bozulabilir.

Şimdi de hazırlanmak için iki kez çağrıldığını görüyorum, ilk önce hazırlanmaktansa, daha sonra, sonra yeniden hazırlanıp, sonra hazırlıklı olun.

Bu farklı görünümlere koşullu olarak gitmek için ne yapıyorum?

+0

şey Segues kadar bağlı olan yollar muhtemelen yanlıştır. IB'de neler yaptığınızı anlatabilir veya hikaye tahtanızın görüntüsüne bağlantı gönderebilir misiniz? Doğrudan bir hücre prototipinden birden fazla seferi mi bağlıyorsunuz? Eğer öyleyse, bu yanlıştır. – rdelmar

+0

evet, bir hücre prototipinden birden fazla seferi bağlıyorum. Sanırım sorun bu – Atma

cevap

2

Bunun nedeni, bir tablo görüntüleme hücresinden çoklu görünümlere sürükleyemezsiniz. @rdelmar, bunun yanlış olduğunu belirtti. Hedeften kaynak görünümüne sürüklenmeli ve sonra yukarıda yaptığım gibi elle işlem yapmalısınız. Ayrıca

burada bulunabilir: Conditional segue performed on tap on UITableViewCell

+0

Ayrıca, eğer 'didSelectRowAtIndexPath', koşullu olarak bir çift olası hedef sahnelerden birine saldırmak için kullanıyorsanız, bu denetleyiciler, kaynak denetleyicinin hücre prototipinden kaynaklanmalıdır. yerine, sahne altındaki görünüm denetleyici simgesinden kaynaklanmalıdır. Eğer hücrenin yanı sıra seggiler çağırır bir didSelectRowAtIndexPath' segue varsa, açıkça amaçlanan değil, _two_ segues, çağıracaksınız. – Rob

70

didSelectRowAtIndexPath veya hücredeki iddiaları kullanmalısınız, ancak her ikisini de kullanmalısınız. Eğer didSelectRowAtIndexPath çağırmak için segues istiyorsanız, bu Segues değil sonraki sahneye hücreden olmalı, ama daha ziyade sahnenin üzerindeki çubuktan görünümü denetleyicisi simgesinden:

segue between view controllers

Artık şunları yapabilirsiniz bu yeni segue seçin "özelliklerinin denetçisi" (seçenek + komut +) gidin ve performSegueWithIdentifier çağırdığınızda kodunuzda başvurabileceğiniz bir film şeridi tanımlayıcı tedarik ediyoruz.

+1

Teşekkürler, bu mantıklı. – MQoder

+0

Bu yöntemle destinationViewController'ı nasıl edinirsiniz? – rigdonmr

+0

@rigdonmr - Arabirim oluşturucuya bir eklenti ekleyip eklemediyseniz, ya da "madeSelectRowAtIndexPath" öğesinde "performSegueWithIdentifier" adlı programa göre adlandırılmış bir program eklediyseniz, "prepareForSegue" çağrılacak ve "segue.destinationViewController" öğesine başvurabilirsiniz. – Rob