2013-10-24 21 views
5

Ich habe eine UICollectionView, die aus zahlreichen Zellen besteht. Ich möchte in der Lage sein, auf eine dieser Zellen zu tippen und mein Storyboard-Segment zu einem anderen View-Controller zu leiten, nachdem ich festgestellt habe, dass dies die geeignete Aktion ist.PreparateForSegue wird nie aufgerufen

Ich habe meine sekundäre Ansicht Controller, zusammen mit dem Segment, in meinem Storyboard erstellt. In meiner UICollectionView Unterklasse, habe ich folgende ... implementiert

-(BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender { 
    return NO; // So that I can determine whether or not to perform the segue based on app logic 
} 

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { 
    [collectionView deselectItemAtIndexPath:indexPath animated:YES]; 

    // Selection logic here 
    [self performSegueWithIdentifier:@"showDetailView" sender:self]; 
} 

In dieser Klasse implementiert ich auch - (void) prepareForSegue: (UIStoryboardSegue *) von Segue Absender: (id) sender mir Setup zu ermöglichen, Meine Detailansicht vor der Ausführung des Segments. Es sieht wie folgt aus:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    NSLog(@"HELLO, WORLD!!!"); 
} 

Alles in Ordnung zu sein scheint, aber ich finde, dass prepareForSegue nie aufgerufen. Ich habe versucht, Protokollierung, Haltepunkte setzen. Es gibt keinen Hinweis darauf, dass diese Methode jemals aufgerufen wird. Was fehlt mir hier? Warum wird diese Methode nicht aufgerufen? Während es jetzt eine einfache "Hello, World" -Aussage hat, hatte ich zuvor Code, von dem meine Detailansicht abhängig war, und es würde zu einer Ausnahme führen, weil die Detailansicht nicht richtig eingerichtet wurde.

Gibt es noch etwas, das mir hier fehlt? Etwas, was ich tun sollte, was ich momentan nicht bin?

Antwort

3

PrepareForSegue wird nie aufgerufen, wenn Sie shouldPerformSegueWithIdentifier:NO festlegen.

+0

Danke für die richtige Antwort. – Tommy

6

Sie iOS sagen mit diesem nie segue:

-(BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender { 
    return NO; // So that I can determine whether or not to perform the segue based on app logic 
} 

ändern NEIN zu JA und es sollte funktionieren. Oder fügen Sie eine Logik hinzu, die mindestens YES zurückgibt, wenn Sie das Segment wollen.

+0

Wenn Sie in meiner didSelectItemAtIndexPath-Methode suchen, sehen Sie, dass ich das Segment manuell ausführe. – Shadowman

+1

@Shadowman hast du versucht, es auf JA zu setzen und zu sehen, ob es dann funktioniert? –

2

Stellen Sie sicher, dass Sie die Kennung im Storyboard festlegen und sie auch in Ihrem Delegaten verwenden, wenn Sie eine Prototypzelle (mit Dynamic Cells) verwenden. Ich hatte dieses Problem und nahm mich ein wenig, um es herauszufinden.

static NSString *cellIdent = @"prototypeCellName"; 
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdent]; 
Verwandte Themen