У меня простой UITableView с одним разделом и несколькими строками. Когда пользователь нажимает кнопку аксессуара ячейки (которая связана с detailsSegue. Я хочу знать, какая это была строка ячейки. Чтобы я мог выбрать правильный объект из моего массива и назначить его переменной из следующего представления.
Я использовал метод делегата tableview:accessoryButtonTappedForRowWithIndexPath: и присвоил значение indexPath моему частному свойству myRow. Чем в методе prepareForSegue:sender: я использовал свое значение self.myRow.row для выбора правильного объекта из массива.
Моя проблема в том, что эти два метода выполняются в неправильном порядке. Из 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;
}
}