2012-11-22 11 views
5

Ich habe ein Problem mit der UItableViewCell-Zubehörtaste. Meine Zubehörtaste ist mit einem Übergang zu einem anderen UIViewController "verbunden". Wenn ich auf eine Zubehörtaste tippe, bekomme ich das Objekt vom Modell und übergebe dieses Objekt an den segue destinationViewController. Dies ist meine Vorbereitung für segue Methode:IndexPath für ausgewählte Zubehörtaste in UITableView abrufen

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"IdentityCard"]) 
    { 
     NSLog(@"%i" ,self.tableView.indexPathForSelectedRow.row); 
     [segue.destinationViewController showIdentityCardForTeacher:[self.teachers getTeacherInPosition:self.tableView.indexPathForSelectedRow.row]]; 
    } 
} 

Das Problem ist, dass die NSLog zu Beginn des Verfahrens (nach dem „if“) zeigen immer die Nummer 0! Ich habe versucht, das Verfahren zu implementieren:

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

aber die für segue Verfahren vorzubereiten, bevor dieses Verfahren ausgeführt, so kann ich keine @property für „retten“ die indexPath gesetzt. Wie kann ich dieses Problem lösen?

Antwort

1

Ich behebe das Problem auf diese Weise: Ich verband den UIViewController mit dem destinationViewController (NICHT VON DER ZUBEHÖRKNOPF, ABER VON UIViewController).

habe ich eine @property im ersten View-Controller:

@property (nonatomic) NSInteger indexPathRow; 

dann modifizierte ich den Code wie folgt aus:

-(void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath 
{ 
    NSLog(@"Disclosure Tapped----> %i" ,indexPath.row); 
    self.indexPathRow = indexPath.row; 
    [self performSegueWithIdentifier:@"IdentityCard" sender:self]; 
} 

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"IdentityCard"]) 
    { 
     NSLog(@"%i" ,self.tableView.indexPathForSelectedRow.row); 
     [segue.destinationViewController showIdentityCardForTeacher:[self.teachers getTeacherInPosition:self.indexPathRow]]; 
    } 
} 

Jetzt funktioniert es!

20

In:

- (void) prepareForSegue: (UIStoryboardSegue *) von Segue Absender: (id) sender

... Sie haben die 'Absender' Parameter, der die Zelle wissen lässt, von das Zubehörteil, das geklopft wurde, also mit:

index = [selb.tableView indexPathForCell: sender] .row;

Sie können den Index davon abrufen, um es zu verwenden.

Dann müssen Sie nicht die Methode accessibleButtonTappedForRowWithIndexPath von tableView verwenden.

+0

Vielen Dank! Ich habe nie realisiert, dass der Absender automatisch mit der Zelle bestückt wird. Es macht aber irgendwie Sinn: D – Fogmeister

0

@ Andres Lösung ist Arbeit für mich, aber wenn ich die Schaltfläche Hinzufügen der Navigationsleiste hinzufügen möchte und ich denselben Viewcontroller mit gleichen Segment-ID dann index = [self.tableView indexPathForCell:sender].row; Code nicht funktionieren, da der Absender nicht Unterklasse von UITableViewCell ist. Also hier ist meine Lösung mit @Andres Code:

Verwandte Themen