2015-09-21 2 views
9

У меня есть пользовательский подкласс UITableViewCell, который содержит несколько методов IBAction, подключенных с помощью наконечника.IBAction внутри UITableViewCell не вызывается в iOS 9

Под iOS 8 все работает так, как ожидалось. Если пользователь удаляет одну из кнопок, вызывается соответствующий номер IBAction. Если пользователь нажимает в другом месте ячейки, вызывается UITableView didSelectRowAtIndexPath.

Под iOS 9 мои методы IBAction никогда не вызываются. UITableViewdidSelectRowAtIndexPath всегда срабатывает независимо от того, где пользователь вступает в ячейку (кнопка или нет).

Проект составлен под Xcode 6/Swift 1.2.

Я нашел это сообщение на форуме Apple без решения. У них, похоже, такая же проблема.

https://forums.developer.apple.com/thread/16179

ответ

22

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

Я унаследовал эту базу кода, и у нее были некоторые проблемы. UITableViewCell's, которые не работали под iOS 9, не использовали UITableViewCell нити с ContentView. Вместо этого кто-то создал UIView нить, а затем указал его на пользовательский подкласс UITableViewCell. У перьев не было ContentView, и, по-видимому, iOS 9 немного более разборчив. Эта реализация отлично работала под iOS 8, и не было ошибок компилятора или времени выполнения или предупреждений.

Решение состояло в том, чтобы создать новый подкласс UITableViewCell и позволить Xcode автоматически создать для него наконечник. Затем я скопировал весь пользовательский интерфейс и код из старого наконечника и вставил его в ContentView нового наконечника. Затем мне пришлось исправить ограничения и переустановить подключения к пользовательскому подклассу.

+6

или просто добавьте UITableViewCell из библиотеки объектов в один и тот же файл xib, copypaste/relayout/relink IBOutlets/установите базовый класс, затем удалите старый вид. – jki

+1

Спасибо за это! Действительно расстраивает. –

+1

Спасибо, что поделились. Я весь день пробовал, пока не увидел ваш ответ. – user3144836

3

просто добавьте эту строку в методе tableViewCellForRowAtIndexPath

cell.contentView.userInteractionEnabled = false; 
return cell; 

, но это не является правильным решением.

iOS 9 помещает представление содержимого в ячейку tableView, даже если вы используете пользовательскую ячейку/xib. Содержимое, добавляемое после пользовательской ячейки, было поверх него.

Чтобы решить эту проблему, просто замените пользовательский вид ячейки/xib на UITableviewCell из библиотеки объектов [откуда обычно перетаскиваются & drop UIButton, UILable и т. Д.];

+0

Это отличное решение, если вы хотите быстро исправить. Я использовал стороннюю структуру, которая перестала работать. Все, что мне нужно было сделать, это отключить пользовательские запросы в contentview. в initWithCoder (это был файл nib). –

Смежные вопросы