Реализуйте только метод tableView:willSelectRowAtIndexPath:
в источнике данных для вашей таблицы. Если вы хотите, чтобы строка в пути была выделена, верните заданный indexPath. Если нет, верните ноль.
Пример из моего приложения:
- (NSIndexPath *)tableView:(UITableView *)tableView
willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
MySelectableObj* obj = [self objectAtPath:indexPath];
if(obj==nil) return nil;
return indexPath;
}
Приятно то, что shouldPerformSegueWithIdentifier:sender:
не будет вызываться, если вышеупомянутый метод возвращает ноль, хотя я повторяю тест выше только для полноты.