Если вы используете, prepareForSegue:sender:
то вам не нужно будет так много менять, если вы позже решите запустить переход из какого-либо элемента управления за пределами табличного представления.
prepareForSegue:sender:
Сообщение отправляется на текущий контроллер представления, так что я хотел бы предложить что - то вроде этого:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// Assume self.view is the table view
NSIndexPath *path = [self.tableView indexPathForSelectedRow];
DetailObject *detail = [self detailForIndexPath:path];
[segue.destinationViewController setDetail:detail];
}
В Swift:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let path = self.tableView.indexPathForSelectedRow()!
segue.destinationViewController.detail = self.detailForIndexPath(path)
}
self.view
быть простоsender
здесь? Я даже не мог приступить[self.view indexPathForSelectedRow]
к работе, мне нужно было это сделать[sender indexPathForSelectedRow];
tableView.indexPathForSelectedRow()
приprepareFroSegue...
вызове содержится правильное значение :tableView(_:didSelectrowAtIndexPath:)
вызывается позже.Я сделал это, и это сработало
источник
Если отправителем является UITableViewCell, вы можете попросить UITableView запросить indexPath ячейки.
источник
если ваше свойство tableView находится в другом классе и у вас есть только один раздел , вы можете использовать
tag
свойство для хранения строки ячейки, например:И тогда вы можете получить к нему доступ, поскольку
sender
это та же ячейка со значением строки в ее теге:источник
self.tableView.indexPathForSelectedRow
возвращает выбранную ячейку, но не сохраняет ячейку отправителя, например, ячейка отправителя не выбрана (дополнительное действие) или в случае множественного выбора. Лучший способ - получить indexPath для отправителя segue:В Swift:
источник
Если вы используете,
prepareForSegue:
вы можете проверить, кто является отправителем, и выполнить другой кодНапример в быстром
источник