2013-02-11 4 views
16
if([segue.identifier isEqualToString:@"Edit"]){ 

    AddCoffeeViewController *avc = [segue destinationViewController]; 

    Coffee *coffeeObj = [appDelegate.coffeeArray objectAtIndex:arow]; 
    NSLog(@"ViewController.m prepareForSegue: arow: %d coffeeName:%@ price:%@  coffeeID:%d",arow,coffeeObj.coffeeName,coffeeObj.price,coffeeObj.coffeeID); 
    [coffeeObj setIsInEditMode:YES]; 
    avc.EditCoffeeObj = coffeeObj; 


} 

Ich bekomme nicht die richtige Zeile, wenn ich Zubehörtaste drücken.
Obwohl in der unten genannten Methode bekomme ich die richtige Zeile. Gibt es eine Möglichkeit, dass ich die richtige Zeile für den Übergang vorbereiten kann, wenn ich keinen Ivar verwenden möchte.indexpath row nicht in Vorbereitung für die Weitergabe für Detail-Offenbarung

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

arow = indexPath.row; 

} 

enter image description here


tableViewCell Zubehör-Taste: Darstellende modal Segue (Edit)
+ Button (Navigationsleiste Taste Item): Darstellende modal Segue (Add)

+0

Warum nicht nur für segue vorbereiten legen direkt in accessoryButtonTappedForRowWithIndexPath? –

+0

Ich möchte Kaffee Klasse Objekt übergeben. if use [self performSegueWithIdentifier: @ "Edit" sender: nil]; dann gibt es auch noch welche, dass ich Coffee class object auch weitergeben kann. –

+0

HINWEIS: Das Aufrufen von Übergängen über eine Zubehörtaste wurde erstmals in iOS6 eingeführt. Eine gute Problemumgehung besteht darin, eine benutzerdefinierte Zelle zu erstellen und eine Schaltfläche hinzuzufügen und das Segment von dieser Schaltfläche aus aufzurufen. – Groot

Antwort

34

Wenn Sie eine Zusatzaktion in Ihrem Storyboard angeschlossen haben, wird sender in prepareForSegue:sender: die Zelle sein, die angezapft wurde. Dies bedeutet, dass Sie nur so etwas wie

NSIndexPath *indexPath = [self.tableView indexPathForCell:sender]; 
+0

hey Ihre Lösung war richtig. Vielen Dank. Ich verstehe nicht, warum manche Leute meiner Frage einen negativen Beitrag geben. Versuch es einfach, du wirst das gleiche Problem haben. –

+0

Ich liebe dich, Alter. Vielen Dank –

+0

vielen Dank, Alter. – shaikh

3

Zubehör Taste abgegriffen und ausgewählte Zeile sind zwei verschiedene Dinge. Setzen Sie in accessoryButtonTappedForRowWithIndexPath den IndexPath einfach auf eine globale Variable und verwenden Sie diese dann im Abschnitt.

0

SWIFT 3.0 Lösung tun können; Sehr ähnlich zur Objective-C-Version. So Cell ist Sender und wir erhalten die indexPath durch Zelle, in dem Zubehör

gedrückt
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if let destination = segue.destination as? YourViewController { 
     let indexPath = tableView.indexPath(for: sender as! UITableViewCell)! 
    } 
} 
Verwandte Themen