Я добавляю дополнительный ответ только потому, что после прочтения выбранного выше во многих местах, кроме этого - и он является правильным ответом - я обнаружил, что задаюсь вопросом, как обнаружить касание, которое обычновызвать переход.Видите ли, если вы создадите свой переход обычным способом путем перетаскивания Ctrl из ячейки табличного представления на следующий контроллер, то для вас автоматически будут выполнены две вещи:
- обнаружено касание в ячейке
- переход выполняется
но, конечно, вы не можете заблокировать переход.
Теперь, если вы хотите условно переходзатем (как упоминалось в других ответах) вы удаляете этот переход и создаете новый из UITableViewController (перетаскиваете его из навигатора объектов, а не раскадровки) на следующий контроллер - и присваиваете ему имя.
Затем - и это та часть, которую мне не хватало - внедрите tableView:didSelectRowAtIndexPath
в своем контроллере табличного представления для программного и условного выполнения перехода, как показано ниже.
Обратите внимание, что вам также необходимо как-то идентифицировать свою ячейку, чтобы вызнать, был ли выбран тот, который вас интересует.Вы могли бы сделать это, зная путь индекса в статической таблице, но я предпочитаю устанавливать уникальный идентификатор моих ячеек в IB (даже если он не нужен для удаления из очереди, поскольку это статическая таблица) и проверять его.Таким образом, если я переместлю свою ячейку вверх или вниз в статической таблице, мне не нужно будет менять этот код.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// Find the selected cell in the usual way
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
// Check if this is the cell I want to segue from by using the reuseIdenifier
// which I set in the "Identifier" field in Interface Builder
if ([cell.reuseIdentifier isEqualToString:@"CellIWantToSegueFrom"]) {
// Do my conditional logic - this was the whole point of changing the segue
if (myConditionForSegueIsSatisfied) {
// Perform the segue using the identifier I was careful to give it in IB
// Note I'm sending the cell as the sender because that's what the normal
// segue does and I already had code counting on that
[self performSegueWithIdentifier:@"SegueIdentifer" sender:cell];
}
}
Обратите внимание, как я отправляю ячейку с переходом - нормальный переход из ячейкиделает это, и я изначально передал ноль, и мой код, который зависел от него, перестал работать.