Строка indexpath не попадает в готовность к segue для подробного раскрытия
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;
}
Я не получаю правильную строку, когда нажимаю кнопку аксессуара.
Хотя в методе ниже я получаю правильную строку.
Есть ли способ, которым я могу получить правильную строку, готовьтесь к segue, если я не хочу использовать нивара.
-(void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath{
arow = indexPath.row;
}
![enter image description here]()
Кнопка приставки tableViewCell: Выполнение модального сегмента (Edit)
+ Кнопка (кнопка панели навигации Элемент): Выполнение модального сегмента (Добавить)
Ответы
Ответ 1
Если вы подключили аксессуар в своем раскадровке, то sender
в prepareForSegue:sender:
будет ячейкой, которая была прослушена. Это означает, что вы можете просто сделать что-то вроде
NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
Ответ 2
Кнопка выбора аксессуаров и выбранная строка - это две разные вещи. В аксессуарButtonTappedForRowWithIndexPath просто установите indexPath в глобальную переменную, а затем используйте это в сегменте.
Ответ 3
SWIFT 3.0 Решение; Очень похож на версию Objective-C. Итак, Cell является отправителем, и мы получаем indexPath через Ячейка, в которой аксессуар нажат
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let destination = segue.destination as? YourViewController {
let indexPath = tableView.indexPath(for: sender as! UITableViewCell)!
}
}