-didSelectRowAtIndexPath: не вызывается - PullRequest
283 голосов
/ 01 ноября 2008

Я пишу приложение для iOS с табличным представлением внутри представления с вкладками. В моем UITableViewController я реализовал -tableView:didSelectRowAtIndexPath:, но когда я выбираю строку во время выполнения, метод не вызывается. Однако табличное представление заполняется, поэтому я знаю, что в моем контроллере вызываются другие методы tableView.

У кого-нибудь есть идеи, что я, возможно, облажался, чтобы это произошло?

Ответы [ 56 ]

3 голосов
/ 04 июня 2014

Позаботьтесь о свойствах UITableView в раскадровке, в моем случае произошло то, что у меня в раскадровке был выбран «Выбор: одиночный выбор», что не позволяет запускать метод didSelectRowAtIndexPath. 1003 *

3 голосов
/ 25 мая 2011

Хорошо, обновляю здесь, поскольку я только что столкнулся с этой проблемой, и моя проблема немного отличалась от найденной здесь.

Я посмотрел в IB и увидел, что мой делегат установлен WAS, но он был неправильно установлен на VIEW вместо владельца файла (щелкните правой кнопкой мыши на табличном представлении, чтобы увидеть, куда указывает делегат).

Надеюсь, что кому-то поможет

2 голосов
/ 16 августа 2017

Если ячейка, по которой вы щелкаете, подсвечивается, но функция все еще не вызывается, дважды проверьте сигнатуру вашей функции. Это должно выглядеть так:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
2 голосов
/ 27 августа 2014

В моем случае, только одна клетка имела эту проблему. Ячейка включает выход UITextView в режиме только для чтения. Хотя до касания это было только для чтения. При постукивании клавиатура поднялась. Оказалось, что все равно нужно отключить взаимодействие.

cell.content.scrollEnabled = NO;
cell.content.editable = NO;
cell.content.userInteractionEnabled = NO;
cell.content.delegate = nil;

[cell.content resignFirstResponder];

2 голосов
/ 22 февраля 2018

Проверьте, есть ли у вашего viewController следующий метод:

- (BOOL) tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath {
    return NO;
}

если вы вернете "НЕТ", didSelectRow не будет вызываться

2 голосов
/ 18 октября 2015

В моем случае проблема заключалась в том, что у меня был подкласс UITableViewCell, и я реализовал эти два метода: touchesBegan:withEvent: & touchesEnded:withEvent для обработки необычной анимации при прикосновении. Но я забыл добавить [super touchesBegan:touches withEvent:event]; метод объявления [super touchesEnded:touches withEvent:event];, чтобы также сообщить родителю ячейки касания.

Таким образом, изменение кода на следующее решило мою проблему:

-(void) touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event{
    [super touchesBegan:touches withEvent:event];
    //blah blah blah
}

-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
    [super touchesEnded:touches withEvent:event];
    //rest of the code
}
2 голосов
/ 11 февраля 2014

Если у вас есть пользовательская ячейка, не забудьте установить UserInteractionEnabled в Xib (или через код) для ячейки.

2 голосов
/ 17 марта 2014

Проверьте, не возвращает ли -heightForRowAtIndexPath значение 0.

2 голосов
/ 13 июня 2013

Вероятно, это было только в моем случае, но я перезагрузил некоторые файлы из резервной копии, и все не работало, в том числе это. После полной очистки (Product> Clean или Shift + Command + K) все заработало. Возможно, что-то запуталось в скомпилированном заголовке. Скорее всего, это не проблема для вас, но стоит попробовать.

1 голос
/ 06 апреля 2014

Еще одна безумная возможность: я запускал свое приложение на iPhone 5S и использовал:

- (float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

как я всегда делал в прошлом.

Однако я недостаточно внимательно изучил предупреждения моего компилятора ... он сказал, что я должен изменить эту строку выше на:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

64-битная совместимость! кулак

Будьте начеку, если вы начнете вырывать свои волосы.

...