私はUITableView
1つのセクションといくつかの行で単純にしました。ユーザーがセルアクセサリボタン(に接続されていdetailsSegue
ます。セルの行が何であるかを知りたいのですが。配列から適切なオブジェクトを選択し、次のビューから変数に割り当てることができます)をクリックしたとき。
デリゲートメソッドを使用tableview:accessoryButtonTappedForRowWithIndexPath:
し、indexPath値をプライベートプロパティに割り当てましたmyRow
。prepareForSegue:sender:
メソッドよりも、self.myRow.row
値を使用して配列から適切なオブジェクトを選択しました。
私の問題は、これら2つのメソッドが間違った順序で実行されているように見えることです。NSLogから、prepareForSegue:sender:
メソッドが最初に実行され、デリゲートメソッドがself.myRow
その後の値を変更していることがわかります。
したがって、prepareForSegue:sender:
メソッドは常に間違ったオブジェクトを次のビュー(以前にタップされたビュー)に渡します。
私の英語の人に申し訳ありません。よろしくお願いします。
-(void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath {
self.myRow = indexPath;
NSLog(@"tapped button at row: %i",self.myRow.row);
}
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if([segue.identifier isEqualToString:@"addSegue"]) {
AddViewController *avc = segue.destinationViewController;
avc.delegate = self;
}
else if ([segue.identifier isEqualToString:@"detailsSegue"]) {
NSLog(@"Segue row: %i",self.myRow.row);
Annotation *annotation = [self.viewsList objectAtIndex:self.myRow.row];
NSLog(@"Segue annotation object: %@",annotation.title);
DetailsViewController *dvc = segue.destinationViewController;
dvc.wikiKey = annotation.title;
}
}