Использование Interface Builder для UITableViews

Я очень рано изучаю процесс разработки iPhone. Я пытаюсь размахивать кусками. Прямо сейчас я только что взял базовый шаблон NavigationController, и я пытаюсь создать простое сгруппированное представление таблицы с несколькими текстовыми полями. То, что я не могу сделать, это заставить Interface Builder разрешить мне отключить UITableViewCell в UITableView, чтобы затем добавить текстовое поле в ячейку. Возможно ли это (может показаться, что предполагается, что UITableViewCell является перетаскиваемым элементом управления)?

Если нет, значит ли это, что все это код, который мне нужно будет написать?

Ответы

Ответ 1

Вы можете создать ячейку с помощью Interface Builder, но вы должны сделать ее объектом верхнего уровня, а не дочерним элементом представления таблицы. Затем вы можете вернуть эту ячейку в свой контроллер контроллера tableView: cellForRowAtIndexPath:.

Обязательно укажите ячейке идентификатор в интерфейсе Builder, а затем используйте тот же идентификатор с dequeueReusableCellWithIdentifier: (см. пример кода, как это работает - идея это то, что ячейки повторно используются - ОС будет выделять столько ячеек, сколько поместится на экране одновременно. Умный способ сохранить память.)

Ответ 2

Будьте осторожны с методом Boot To The Head. Вы будете утечка, если вы не будете иметь дело с вашим IBOutlets. Я попытаюсь объяснить это, насколько это возможно, без отправки кода (NDA). Если вы планируете использовать IB для создания своей ячейки, сделайте UITableViewCell своим собственным Xib файлом. Установите File Owner в качестве подкласса UIViewController (или UITableController). Назовите IBOutlet что-то вроде UITableViewCell *cellFactory. В методе UITableViewDataSource tableView:cellForRowAtIndexPath: выполните следующий псевдокод:

  • Попробуйте удалить ячейку, используя идентификатор, который вы установили в IB
  • В случае успеха сделайте это. Просто используйте ячейку
  • Иначе вам нужно создать новую ячейку. Используйте метод [NSBundle mainBundle] loadNibNamed:owner:options: с вашим собственным файлом xib. Это заполнит ячейку cellFactory новой ячейкой. Здесь сложная часть.
  • установите cell = cellFactory, затем отпустите cellFactory и установите его на нуль, чтобы убедиться, что вы случайно не используете его снова. Теперь вы можете безопасно использовать свою ячейку как обычно.

Ответ 3

К сожалению, на самом деле это не так: ячейки в представлении таблицы генерируются делегатом во время выполнения. Тем не менее, это очень простой код. Посмотрите примерный пример таблицы, это довольно легко выполнить.