Ответ 1
Создайте подкласс ячейки представления таблицы и установите его как класс прототипа. Добавьте выходы в этот класс и соедините их. Теперь, когда вы настраиваете ячейку, вы можете получить доступ к выходам.
Я только что создал приложение и начал подключать @IBOutlet к раскадровке. Я связываю некоторые из них с ярлыками в ячейке прототипа UITableViewCell с базовым стилем. Когда я подключу его, хотя я получаю эту ошибку в раскадровке:
Выходной файл detailText из TableViewController в UILabel недействителен. Выходы не могут быть подключены к повторному контенту.
Может кто-нибудь помочь мне? Я настроил его так, как я всегда делаю это успешно, но на этот раз он ударил меня этой ошибкой.
Создайте подкласс ячейки представления таблицы и установите его как класс прототипа. Добавьте выходы в этот класс и соедините их. Теперь, когда вы настраиваете ячейку, вы можете получить доступ к выходам.
Если вы используете представление таблицы для отображения настроек и других параметров (как это делает встроенное приложение "Настройки" ), вы можете настроить представление табличного содержания на статические ячейки в Инспектор атрибутов. Кроме того, для этого вы должны встроить свой вид таблицы в экземпляр UITableViewController.
Существует два типа ячеек представления таблиц, предоставленных вам через раскадровку: Динамические прототипы и Статические ячейки
1. Динамические прототипы
От имени этот тип ячеек генерируется динамически. Они контролируются вашим кодом, а не раскадрой. С помощью делегата таблицы и источника данных вы можете указать количество ячеек, высоты ячеек, прототип ячеек программным путем.
Когда вы перетаскиваете ячейку в представление таблицы, вы объявляете прототип ячеек. Затем вы можете создать любое количество ячеек базы на этом прототипе и затем добавить в табличное представление, хотя метод cellForRow
, программно. Преимущество этого заключается в том, что вам нужно определить только один прототип, а не создавать каждую ячейку со всеми представлениями, добавленными ими самим (см. Статическую ячейку).
Таким образом, в этом случае вы не можете подключить элементы пользовательского интерфейса к прототипу соты к контроллеру представления. У вас будет только один объект контроллера объекта, но у вас может быть много объектов ячейки, которые были инициированы и добавлены в представление таблицы. Не имеет смысла подключать прототип соты для просмотра контроллера, потому что вы не можете управлять несколькими ячейками с одним подключением к контроллеру. И вы получите сообщение об ошибке, если вы это сделаете.
Чтобы устранить эту проблему, вам необходимо подключить метку прототипа к объекту UITableViewCell
. UITableViewCell
также является прототипом ячеек, и вы можете инициировать столько объектов ячейки, сколько хотите, каждый из них затем подключается к представлению, которое создается из прототипа ячейки таблицы раскадровки.
Наконец, в вашем методе cellForRow
создайте пользовательскую ячейку из класса UITableViewCell
и сделайте забавные вещи с меткой
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "yourCellIdentifier") as! YourCell
cell.label.text = "it works!"
return cell
}
2. Статические клетки
С другой стороны, статические ячейки действительно настроены, хотя раскадровка. Вам нужно перетащить элементы пользовательского интерфейса в каждую ячейку, чтобы создать их. Вы будете контролировать номера ячеек, высоты и т.д. Из раскадровки. В этом случае вы увидите табличное представление, которое точно совпадает с вашим телефоном по сравнению с тем, что вы создали из раскадровки. Статические ячейки чаще используются для настройки страницы, в которой ячейки не сильно меняются.
Чтобы управлять элементами пользовательского интерфейса для статической ячейки, вам действительно нужно будет подключить их непосредственно к контроллеру представления и настроить их
У меня есть UIViewcontroller
, и в нем у меня есть табличное представление с пользовательской ячейкой на нем. Я сопоставляю свою розетку UILabel в UItableviewcell
с UIViewcontroller
, после чего получил ошибку.
Или вам не нужно использовать IBOutlet для ссылки на объект в представлении. Вы можете присвоить ярлыку в tableViewCell значение тега, например, установить тег 123 (это может быть сделано инспектором атрибутов). Затем вы можете получить доступ к метке
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "someID", for: indexPath)
let label = cell.viewWithTag(123) as! UILabel //refer the label by Tag
switch indexPath.row {
case 0:
label.text = "Hello World!"
default:
label.text = "Default"
}
return cell
}