Странная ошибка при добавлении элементов в ячейки прототипа в раскадровке-IB

У меня довольно большой проект (~20 сцен). Одним из них является TableViewController с пользовательским классом UITableViewController. Я дал ячейке идентификатор повторного использования и добавил к ней метку. Когда я пытаюсь и Ctrl + перетащите метку в файл заголовка UITableViewController, чтобы создать выход, я получаю следующую ошибку:

ошибка: недопустимая конфигурация: соединение "tableInfoView" не может иметь объект-прототип в качестве места назначения.

Что это? Я упускаю из виду что-то очевидное? Или мне нужно создать собственный класс ячеек и перетащить на него выход? Если да, то как мне указать данные, которые отображаются уникально для каждой ячейки из UITableViewController?


person Alex Godbehere    schedule 27.08.2012    source источник
comment
Вы не можете подключить метку прототипа к розетке в контроллере табличного представления, так как контроллер не является владельцем прототипа (UITableViewCell является). Для прототипов динамических ячеек вам нужно сделать что-то вроде установки тега для ячейки и поиска метки, используя ее после удаления ячейки из очереди.   -  person Jason Coco    schedule 28.08.2012
comment
Только что понял: P В любом случае спасибо за вашу помощь! Напишите это как ответ, и я приму его.   -  person Alex Godbehere    schedule 28.08.2012


Ответы (7)


На самом деле вы не можете просто сделать выход из динамического прототипа ячейки в UITableView контроллере представления делегата.

Вам нужно создать подкласс UITableViewCell, а затем приписать этот класс к вашему прототипу.

Затем вы можете перетащить Ctrl-Drag из метки в файл заголовка подкласса UITableViewCell.

Наконец, вы можете получить доступ к этому выходу в коде делегата после импорта в него файла заголовка UITableViewCell.

Это задокументировано Apple здесь в разделе "Техника динамического содержимого строк".

person dulgan    schedule 25.10.2012
comment
Что вы подразумеваете под сгруппированными ячейками? - person dulgan; 18.02.2013

или вы можете дать ярлыку тег (например, 100) и использовать

myLabel = [myTableView viewForTag:100];

чтобы получить ярлык

person Martin Lockett    schedule 10.07.2013

У меня самого была такая же ошибка. Просто добавим еще одну потенциальную первопричину для будущих читателей:

В моем случае я скопировал элемент управления (в данном случае кнопку) из одной ячейки-прототипа в другую, и действие по-прежнему относилось к соседней ячейке. В моей таблице есть несколько разных ячеек-прототипов.

Тот факт, что на самом деле это был правильный подкласс UITableViewCell, который был должным образом подключен к ячейке-прототипу, затруднял фактическое обнаружение ошибки.

person Hermann Klecker    schedule 03.03.2013

Пометьте метку, и вы сможете добраться до метки в любом месте контроллера представления, например, с помощью viewWithTag из табличного представления.

    UILabel *destinationLabel = (UILabel *)[self.tableView viewWithTag:1];


    destinationLabel.text = @"Label Destaination";
person Reaper    schedule 02.06.2014

Я столкнулся с той же проблемой, но позже выяснилось, что это была просто глупая ошибка. Я по ошибке перетащил метку из Cell в @interface моего контроллера

Это может быть и вашей проблемой. просто перепроверьте один раз.

person thesummersign    schedule 22.01.2013
comment
Я не думаю, что постер просит IBAction, а скорее выход для настройки элемента управления. - person Levi Roberts; 08.05.2014
comment
@LeviRoberts Я не говорю здесь об IBActions. - person thesummersign; 09.09.2014

Установите правильный идентификатор повторного использования, используемый в файле .m в раскадровке для ячейки прототипа. У меня была такая же ситуация, и это помогло мне

person Wodjefer    schedule 22.11.2013

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

person Shahid Aslam    schedule 27.03.2014