Я пишу приложение для iOS с табличным представлением внутри представления вкладок. В моем UITableViewController я реализовал -tableView:didSelectRowAtIndexPath:, но когда я выбираю строку во время выполнения, метод не вызывается. Однако представление таблицы заполняется, поэтому я знаю, что вызываются другие методы tableView в моем контроллере.
Есть ли у кого-нибудь идеи, что я, возможно, напортачил, чтобы это произошло?
Будьте осторожны, если представление таблицы заполняется, это означает, что источник данных настроен правильно. Выбор является частью методов делегата. Так что, возможно, DataSource настроен правильно, но не Delegate!
Привет, М.Отман, ваш комментарий - это именно то, что было не так с моей собственной проблемой. Вы знаете, как заставить gestureRecognizer работать «с» UITableView?
Я замечаю, что если я коснусь и удерживаю, нажатие в конечном итоге вызывает -didSelectRowAtIndexPath. Я понял шляпу, потому что у меня есть распознаватель жестов касания в табличном представлении, и жест должен сначала выйти из строя, прежде чем получить касание. Как ни странно, распознаватель жестов не влияет на анимацию выбора таблицы.
У меня здесь была такая же проблема, и мне посчастливилось узнать, что у вас не может быть gestureRecognizer поверх UITableView. Спасибо М. Осман!





Похоже, что, возможно, класс не является UITableViewDelegate для этого табличного представления, хотя UITableViewController должен установить это автоматически.
Есть ли шанс сбросить делегата на какой-то другой класс?
Я обнаружил, что, хотя моим контроллером был UITableViewController, я использовал простой старый виджет UIViewController в UI Builder. Это не работает. Когда я удалил виджет UIViewController и сбросил на его место UITableViewController, все заработало.
Еще один пограничный случай для всех - я подключил делегата в коде и забыл, что ранее подключал делегата через раскадровку ... последний, который установил его, побеждает.
не могли бы вы показать, как «сбросить делегата в какой-то другой класс», пожалуйста? У меня такая же проблема, и я не могу ее решить
myTableViewController.tableView.delegate = xxx
В этой ситуации я столкнулся с двумя вещами.
Возможно, вы забыли реализовать протокол UITableViewDelegate или между вашим классом и представлением таблицы нет выхода для делегирования.
У вас может быть UIView внутри вашей строки, который является первым респондентом и отбирает ваши клики. Скажите UIButton или что-то подобное.
Это начало происходить в iOS 7, отключение «Взаимодействие с пользователем включено» для представлений в contentView исправило это.
@Kof это сделал. Создание UITableViewCell в построителе интерфейса Xcode 5 создает его с включенным взаимодействием с пользователем = ДА. Плохой Xcode 5!
Я знаю, что старый и проблема была решена, но была аналогичная проблема, я думал, что проблема была с моим пользовательским UITableViewCell, но решение было совершенно другим - я перезапускаю XCode :), а затем работает нормально! почти как винда :)
У меня самого была эта проблема. Я построил основу представления в IB (только View и TableView), а делегат не был установлен. Я подключил его к владельцу файла, и это сработало как шарм. ::спасти::
У меня была такая же проблема. И найти было нелегко. Но где-то в моем коде было это:
- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
return nil;
}
Это должен быть return indexPath, иначе -tableView:didSelectRowAtIndexPath: не вызывается.
для didSelectRow At IndexPath правильная подпись: - (void) tableView: (UITableView *) tableView didSelectRowAtIndexPath: (NSIndexPath *) indexPath {
Для меня он не начал бы вызывать tableView: didSelectRowAtIndexPath, пока я полностью не удалю willSelectRowAtIndexPath
Хорошо, обновление здесь, поскольку я только что столкнулся с этой проблемой, и моя проблема немного отличалась от найденной здесь.
Я заглянул в IB и увидел, что мой делегат БЫЛ установлен, но он был неправильно настроен на VIEW вместо владельца файла (щелкните правой кнопкой мыши в виде таблицы, чтобы увидеть, куда указывает делегат).
Надеюсь, это кому-то поможет
Моя проблема не заключалась в вышеперечисленном. И такой хромой. Но я подумал, что перечислю это здесь на случай, если это кому-то поможет.
У меня есть tableViewController, который является моим «базовым» контроллером, и затем я создаю подклассы этого контроллера. Я писал весь свой код в подпрограмме tableView:didSelectRowAtIndexPath в «базовом» классе. Полностью забывая, что по умолчанию эта процедура также была создана (хотя и без кода, который бы что-либо делал) во всех моих подклассах. Поэтому, когда я запускал свое приложение, оно запускало версию кода подкласса, ничего не делало и меня огорчало. Итак, конечно, как только я удалил подпрограмму из подклассов, она использовала подпрограмму «базового» класса, и я занялся бизнесом.
Я знаю. Не смейся. Но, может быть, это кому-то спасет потерянный мной час ...
Если у вас такая же проблема, как и у меня: Очевидно, этот метод не будет вызываться, если ваш tableView находится в режиме редактирования. Вы должны установить для allowSelectionDuringEditing значение true.
Через этот вопрос: При редактировании UITableView не вызывает didSelectRowAtIndexPath ??
Несмотря на то, что был принят другой ответ, я добавлю еще одну возможную проблему и решение для людей, которые наблюдают за этой проблемой:
Если у вас включен автоматический подсчет ссылок (ARC), вы можете обнаружить, что даже после назначения вашего контроллера в качестве делегата представления, сообщения представления контроллеру не принимаются, потому что ARC удаляет контроллер. По-видимому, указатель делегата UITableView не считается ссылкой для ARC, поэтому, если это единственная ссылка на него, контроллер будет освобожден. Вы можете проверить, происходит это или нет, реализовав метод dealloc на контроллере и установив там точку останова или вызов NSLog.
Решение состоит в том, чтобы отслеживать контроллер с сильной ссылкой в другом месте, пока вы не будете уверены, что он вам больше не понадобится.
Контроллер собирает мусор, пока его представление все еще отображается? Может ли это действительно случиться?
@Drux Ага! Когда это случилось со мной, это была почти первая версия Obj-C со сборкой мусора, используемая на iOS, и, честно говоря, они не справились с задачей. Многие ссылки были явно или неявно «слабыми», которые, ИМО, должны были быть сильными. Это приводило к странностям, таким как сборка мусора для объектов, активно используемых слоем отображения. Я давно не работал с iOS, поэтому понятия не имею, происходит ли это по-прежнему в последней версии.
У моего кода проблема с увеличивающимся размером памяти, и я исправил ее часть и еще где-то в коде сразу после этого didSelect не будет вызываться только в первый раз. Не знаю, оправдывает ли это проблему или нет.
Все хорошие ответы, но есть еще один, на который стоит обратить внимание ...
(В частности, при программном создании UITableView)
Убедитесь, что tableView может реагировать на выбор, установив [tableView setAllowsSelection:YES]; или удалив любую строку, которая устанавливает его на NO.
Я бы добавил setAllowsSelectionDuringEditing: в список (когда tableview находится в режиме редактирования)
Спасибо! В IB мне пришлось поменять в разделе «Выбор» значение на Single Selection.
Отдавая свои 2 цента на это.
У меня был Custom UITableViewCell, и была кнопка, покрывающая всю ячейку, поэтому, когда произошло касание, была выбрана кнопка, а не ячейка.
Либо удалите кнопку, либо в моем случае я установил для параметра User Interation Enable значение false на кнопке, таким образом, ячейка была выбрана.
Если вы это читаете, значит, проблема все равно не решается.
У меня есть ячейка обычай, где флажок "Взаимодействие с пользователем включено" был отключен. Итак, я просто включаю это. Удачи.
На всякий случай кто-то совершил ту же глупую ошибку, что и я:
Проверьте, может ли имя метода того, что вы ожидаете от didSelect, случайно каким-либо образом получить didDeselect. Мне потребовалось около двух часов, чтобы узнать ...
Здесь та же проблема. Это потому, что XCode автоматически завершает Deselect перед Select.
Точно так же я установил allowSelection = false, который не только удаляет выделение выделения, но и предотвращает нажатие ячейки!
Еще одна вещь, которая может привести к проблеме, - это не выбранный вид выбора:

Должен быть Single Selection для нормального выбора, должен быть No Selectionнет.
Чтобы сделать это программно, выполните:
tableView.allowsSelection = YES
Я продолжаю сталкиваться с этим, потому что у меня есть сцены, которые всегда находятся в режиме редактирования, и я все время забываю изменить значение по умолчанию на «Без выделения во время редактирования».
Вы можете добавить эту строку в свой -viewDidLoad метод viewControlller NSParameterAssert (self.tableView.allowsSelection);
для тех, кто наблюдал tableView.rx.itemSelected.subscribe, не перезвонил, это проблема, и исправление выше работает
так полезно, когда вы берете на себя некоторую кодовую базу, и в ней есть код, использующий кнопки с тегами, а не didSelectRow, при этом этот выбор отключен в раскадровке ?
это поведение по умолчанию для tableView?
Другая возможность состоит в том, что UITapGestureRecognizer может поглощать события, как это было здесь: https://stackoverflow.com/a/9248827/214070
Я не подозревал об этой причине, потому что ячейки таблицы все равно подсвечивались синим цветом, как если бы краны проходили.
Это была моя проблема! Большое спасибо!! Я имею в виду, что он явно работал раньше, но он перестал работать после того, как я реализовал UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector (dismissKeyboard)]; [self.view addGestureRecognizer: коснитесь];
У меня была та же проблема, что и у вас, @ coolcool1994, только что реализованного [нажмите setCancelsTouchesInView: NO]; и решил проблему.
Спасибо, мне это помогает. В моем случае didSelectRowAtIndexPath не работает только после удаления ячейки в commitEditingStyle. Затем я делаю UITapGestureRecognizer, а в tapAction: получаю indexPath из sender.view ([self.tableView indexPathForCell:sender.view]) и вызываю [self.tableView.delegate didSelectRowAtIndexPath:myIndexPath].
Это тоже была моя проблема ... добавьте код для удаления касания в tableview, и он работал как шарм - (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath {UITapGestureRecognizer * gesture = [[UITapGesture ] в этом]; gesture.cancelsTouchesInView = НЕТ; [self.tableView addGestureRecognizer: жест]; }
Спасибо @nizx, быстро 4 tap.cancelsTouchesInView = false
Просто вот для соотношения. Спасибо!
Не забудьте установить источник данных и делегат в методе viewDidLoad следующим образом:
[self.tableView setDelegate:self];
[self.tableView setDataSource:self];
Я звонил в источник данных, но не делегировал ... спасибо!
У меня возникла проблема с тем, что элемент управления не собирался выбирать строку после применения точки останова. проблема была в виду. Я убрал жест табуляции из поля зрения. тогда он работал нормально
Вероятно, это было только в моем случае, но я перезагрузил некоторые файлы из резервной копии, и все не работало, в том числе и это. После полной очистки (Продукт> Очистить или Shift + Command + K) все заработало. Возможно, что-то напортачило в предварительно скомпилированном заголовке. Скорее всего, это не проблема для вас, но попробовать стоит.
Еще одна ошибка, которую вы могли сделать (как и я): если вы установите переход на ячейку, didSelectRowAtIndexPath не будет вызван. Вместо этого вы должны установить свои сегменты в контроллере представления.
У меня возникла проблема, когда после нескольких месяцев, когда я не смотрел свой код, я забыл, что реализовал следующий метод из-за некоторых требований, которые не были необходимы
- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath{
return NO;
}
Он должен вернуть YES для строки, чтобы сделать ее выбранной.
Другая возможная причина заключается в том, что UITableView встроен в UIScrollView. У меня была эта проблема сегодня, потому что у меня случайно было представление прокрутки вместо обычного представления в качестве корневого представления моего контроллера.
+1 Это была моя проблема: некоторые флаги на UIScrollView были выставлены неправильно. Теперь работает, например. с этими флагами, установленными на Да (другие - на Нет) в IB: показывает горизонтальный индикатор, прокрутка включена, разбиение по страницам включено, отказы, масштабирование отказов, задержка касаний к контенту, отключаемые касания к контенту, возможность взаимодействия с пользователем, множественное касание.
Ни один из этих ответов не помог мне. Примерно через час я выяснил кое-что очень коварное:
У меня есть табличное представление внутри ячейки другого табличного представления. Я решил сделать закрывающее представление, содержащее, помимо прочего, внутреннее табличное представление. Я назвал это представление contentView и подключил его к xib.
Оказывается, UITableViewCell уже имеет contentView и делает с ним странные вещи. Проблема разрешилась сама собой, когда я переименовал свойство в mainContentView и повторно подключил представление к этому переименованному свойству.
У меня был вызов cell.userInteractionEnabled, скрытый в каком-то настроенном табличном коде.
Глупо, но не большинство ошибок?
Я поместил UITapGestureRecognizer в свой табличный вид, чтобы отключить клавиатуру, которая препятствовала вызову didSelectRowAtIndexPath:. Надеюсь, это кому-то поможет.
Спасло меня - у меня было два жеста, один для долгого нажатия, который я удалил, забыв, что у меня есть еще один для увольнения с клавиатуры
Если у вас есть настраиваемая ячейка, не забудьте установить UserInteractionEnabled в Xib (или через код) для ячейки.
Акцентируйте внимание на установке значения userInteractionEnabled пользовательской ячейки на НЕТ
Проверьте, не возвращает ли -heightForRowAtIndexPath 0.
Еще одна безумная возможность: я запускал свое приложение на iPhone 5S и использовал:
- (float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
как я всегда делал в прошлом.
Однако я недостаточно внимательно изучил предупреждения компилятора ... он сказал, что я должен изменить эту строку выше на:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
64-битная совместимость! качает кулак
Будьте начеку, если начнете рвать волосы.
Позаботьтесь о свойствах UITableView в раскадровке. В моем случае в раскадровке было выбрано поле со списком в раскадровке, выбранное как «Выбор: один выбор», что не позволяет запускать метод didSelectRowAtIndexPath.
У меня такая же проблема,
Причина в использовании UITapGestureRecognizer. Я хотел, чтобы клавиатура отключалась, когда я нажимаю где-нибудь еще. Я понял, что это отменяет все действия касания, поэтому функция didSelectRowAtIndexPath не вызывалась.
Когда я комментирую строки, связанные с UITapGestureRecognizer, это работает. Кроме того, вы можете проверить работу UITapGestureRecognizer selector, если прослушивается UITableViewCell или нет.
У меня только что это было, и, как бывало со мной в прошлом, это не сработало, потому что я не обратил внимания на автозаполнение при попытке добавить метод, и я фактически реализовал tableView:didDeselectRowAtIndexPath: вместо tableView:didSelectRowAtIndexPath:.
В моем случае я динамически вычисляю высоту TableViewSuperView во время загрузки. Из-за просчета TableView был расположен вне SuperView. TableView рисовался нормально, однако все взаимодействие было отключено (и didSelectRowAtIndexPath никогда не вызывался). Очень сложно обнаружить, так как нет визуальных указаний на то, что TableView «недоступен».
Комментировать не могу, пишите сюда.
В моем случае didSelectRow работал, но не didDeselectRow.
Я установил delegate и dataSource для tableView, и это решило мой случай.
В моем случае эта проблема была только в одной ячейке. Ячейка включала выход UITextView в режиме только для чтения. Хотя до тапа он был только для чтения. При нажатии клавиатура поднялась. Оказалось, что еще нужно отключить взаимодействие.
cell.content.scrollEnabled = NO;
cell.content.editable = NO;
cell.content.userInteractionEnabled = NO;
cell.content.delegate = nil;
[cell.content resignFirstResponder];
У меня только что возникла эта проблема, но она возникла не сразу; после выбора нескольких ячеек они перестанут вызывать didSelectItemAtIndexPath. Я понял, что проблема в том, что в представлении коллекции для allowsMultipleSelection установлено значение ИСТИНА. Поскольку выбор ячеек никогда не отменялся, это мешало будущим вызовам вызывать didSelectItemAtIndexPath.
Если проблема возникает с UITapGestureRecognizer, вы можете исправить это:

в коде с Objective-C:
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
[self.view addGestureRecognizer:tap];
[tap setCancelsTouchesInView:NO];
в коде с Swift:
let tap = UITapGestureRecognizer(target: self, action:Selector("dismissKeyboard"))
view.addGestureRecognizer(tap)
tap.cancelsTouchesInView = false
Убедитесь, что вы реализовали tableView:didSelectRowAtIndexPath, а не tableView:didDeSelectRowAtIndexPath
Это получалось у меня более чем несколько раз !!
У меня периодически возникала эта проблема. Иногда прикосновение к ячейке приводило к ее выделению. Иногда он не получал событие касания.
Я использую функции, представленные в ios8, которые называются саморазмерными ячейками. Я наткнулся на этот Сообщение блога, который указывает, что:
When the table view is first displayed, you may find some of the cells are not sized properly. But when you scroll the table view, the new cells are displayed with correct row height. To workaround this issue, you can force a reload after the view appears:
override func viewDidAppear(animated: Bool) {
tableView.reloadData()
}
Это устранило проблему для меня. Несмотря на то, что представление таблицы отображалось правильно, обработка касания (в частности, hitTest для UITableView), по-видимому, была подвержена вышеупомянутой ошибке.
Я повторил все предыдущие ответы, но ни один из них мне не помог. После некоторых проб и ошибок я нашел другое решение. У меня был UIImageView, покрывающий всю ячейку (в качестве фона). По умолчанию в UIImageView отключено взаимодействие с пользователем. При включении imageviews для взаимодействия с пользователем метод делегата -didSelectRowAtIndexPath: был вызван снова. например.
cell.imgView.userInteractionEnabled = YES;
В моем случае проблема заключалась в том, что у меня был подкласс 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
}
Могу подтвердить, что это вызвало проблему OP, в частности, для меня
Если вы добавили gestureRecognizer поверх UITableView, didSelectRowAtIndexPath не будет вызываться.
Поэтому вам нужно использовать метод делегата gestureRecognizer, чтобы избежать касания в конкретном представлении.
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if ([touch.view isDescendantOfView:YourTable]) {
return NO;
}
return YES;
}
if ([touch.view isDescendantOfView:YourTable])В этом посте есть несколько удивительных подсказок и ответов (возможно, это одно из лучших обсуждений, которые я видел!) Подсказки здесь помогли мне выяснить, в чем была моя проблема, но я все равно провел много часов, пуская слюни на клавиатуре, пытаясь обнаружить проблема, которая была похожа на другие сообщения. Однако то, как я, наконец, обнаружил, было немного по-другому, поэтому я хотел поделиться на случай, если другие тоже столкнутся с этим.
Оказывается, моя проблема заключалась в том, что в коде суперкласс добавлял полноэкранное «представление ошибок», которое не было скрытым, а прозрачным. Однако, поскольку он был над табличным представлением, а «действие пользователя» было установлено на ДА, он перехватил мои прикосновения к табличному представлению.
Я диагностировал это с помощью классной кнопки Xcode "Debug View Hierarchy". Вот снимок экрана с аннотациями, которые, надеюсь, объясняют, что я сделал и как я в конечном итоге диагностировал проблему.
В коде мне просто нужно было сделать:
errorMessageView.setUserInteractionEnabled = NO;
// or
errorMessageView.hidden = YES;
Мой случай был похож. Полноэкранный «просмотр касания», который получал события касания. Даже удаление распознавателя жестов касания не решило эту проблему, потому что «представление касания» было выше в Z-порядке, чем мое табличное представление. Я переместил «представление касания» под табличное представление, и проблема была решена.
Если ваше табличное представление находится в режиме редактирования (например, [tableView setEditing:YES animated:NO];), вам необходимо установить tableView.allowsSelectionDuringEditing = YES;
Добавить @interface ExampleViewController () <UITableViewDelegate, UITableViewDataSource>
Делегирование в раскадровке
Добавить код
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
NSString *cellText = cell.textLabel.text;
}
В моем случае решение состояло в том, чтобы изменить НЕТ на ДА в приведенной ниже функции.
iOS 9+
- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}
Это тоже была моя проблема. У меня есть несколько реализаций tableView, и я забыл разделить два tableView в этом методе.
Если ячейка, которую вы нажимаете, выделяется, но функция все еще не вызывается, дважды проверьте подпись вашей функции. Должно получиться так:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
в моем случае именно это и происходит, но подпись верна. я на грани своего остроумия
Я не уверен, что кто-нибудь прокрутит достаточно далеко, чтобы увидеть этот ответ, но поскольку это самый популярный вопрос по этой теме, и ответа там не было, я добавлю его:
Начиная с Xcode 9 / Swift 4 все методы Objective-C должны быть помечены как @objc. Компилятор выполняет разумную работу по распознаванию того, где его следует применять, однако он не определяет наследование. Например:
class Delegate: NSObject, UITableViewDelegate {
}
class SuperDelegate: Delegate {
override func tableView(_ tableView: UITableView, willSelectRowAt indexPath: IndexPath) -> IndexPath? { return indexPath }
}
Это не вызовет никаких предупреждений, сбоев или ошибок сборки. Однако ваша линия не будет вызываться, пока вы не добавите @objc:
@objc class SuperDelegate: Delegate {
override func tableView(_ tableView: UITableView, willSelectRowAt indexPath: IndexPath) -> IndexPath? { return indexPath }
}
Убедитесь, что вы вызываете reloadData в основном потоке. Если вы вызываете этот метод из какого-либо асинхронного метода (например, сетевой запрос какого-либо типа), табличное представление может или не может отвечать должным образом (в некоторых случаях приложение может даже аварийно завершить работу).
Используйте блок кода основного потока для выполнения вызова reloadData, если вызов выполняется в каком-либо другом блоке метода (в котором вы не уверены):
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
[tableView reloadData];
}];
Проверьте, есть ли у вашего viewController следующий метод:
- (BOOL) tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath {
return NO;
}
если вы вернете "NO", didSelectRow не будет вызываться
Я потратил весь вчерашний день, пытаясь понять это. Спасибо.
в моем случае я сделал небольшую ошибку, мне назначили:
tableView.isUserInteractionEnabled = false
должен быть:
tableView.isUserInteractionEnabled = true
Я только что нашел другой способ нет вызвать ваш метод didSelect. В какой-то момент, во время какой-то ошибки в самом объявлении func, XCode предложил мне добавить @nonobjc к моему методу:
@nonobjc func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
Это будет продолжать компилироваться без жалоб, но действия пользовательского интерфейса никогда не вызовут вас.
"Это мои два цента, и я захочу вернуть сдачу"
В моем случае проблема заключалась в объявлении метода закрытым.
Это не сработало:
private func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
Это сработало:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
Я прочитал все ответы и полностью с ними согласен. Но в моем случае все иначе. У меня был новый segue для моего detailViewController, связанный напрямую с моим tableCell в StoryBoard, что и вызвало это. Поэтому мне пришлось удалить этот сегмент из моей ячейки и связать его с самим UITableViewController. Теперь, написав следующий код, он работает,
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
// Do any operation
performSegue(withIdentifier: "DetailSegue", sender: self)
}
Надеюсь, это решение кому-то поможет!
ты должен это проверить выбор должен быть однократным, а редактирование не должно производиться во время редактирования и вы также меняете настройку в свойствах uttableviewcell вы редактируете в ячейке табличного представления стиль должен быть индивидуальным, а идентификатор должен быть удален и раздел отсутствует
Пожалуйста, проверьте UITapGestureRecognizer. В моем случае жест касания был добавлен для представления, в котором размещено табличное представление, которое потребляет взаимодействие пользователя с UITableview, например didselect. После отключения жестов для представления сработал делегат didselect.
Это была моя проблема, когда я использовал UITableView в ViewController.
tableView?.allowsSelection = true
По умолчанию в Xcode 11.7 это False.
У меня была эта проблема, когда class name моего TableViewController был неправильно установлен в Interface Builder.
также у вас может быть gestureRecognizer поверх UITableView, который поглощает выделение .. (одна из возможностей)