Как добавить панель навигации в UITableViewController в Интерфейсном Разработчике? - PullRequest
39 голосов
/ 21 февраля 2011

Конструктор интерфейсов не позволяет мне щелкать и перетаскивать панель навигации на контроллер табличного представления !!! Это супер расстраивает.

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

Заранее спасибо.

Ответы [ 8 ]

49 голосов
/ 12 сентября 2014

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

Затем перейдите в меню Editor и нажмите кнопку EmbedВ подменю выберите Navigation Controller и вуаля.У вас есть навигационный контроллер, указывающий на контроллер табличного представления со встроенными отношениями.

18 голосов
/ 05 мая 2011

Для табличного представления с кнопкой редактирования вверху используйте UINavigationController с UITableView в качестве корневого представления. Это означает, что вы собираетесь создать собственный подкласс UITableView для вашего табличного представления и использовать его в качестве корневого представления вашего экземпляра UINavigationController. (Программно он устанавливается с помощью UINavigationController -(id)initWithRootViewController. Он также устанавливается через IB.)

Затем в своем подклассе UITableView раскомментируйте следующую строку:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    self.navigationItem.rightBarButtonItem = self.editButtonItem;
}

и вуаля, представление вашего UINavigationController отображается в виде таблицы с кнопкой редактирования в правой части панели навигации.

Поскольку контроллер находится на вершине стека, слева нет кнопки «назад», поэтому вы можете использовать self.navigationItem.leftBarButtonItem для любого создаваемого вами UIBarButtonItem.

12 голосов
/ 21 февраля 2011

Я согласен, что сложно понять, как делать такие вещи в Интерфейсном Разработчике, но, к счастью, возможно добавить панель навигации и элемент панели кнопок в представление таблицы таким образом.Вот как это сделать:

  1. Перетащите пустой вид (экземпляр UIView) из библиотеки в область в верхней части представления таблицы.При перетаскивании рядом с целевой областью Интерфейсный Разработчик будет выделять ее синим цветом, чтобы показать вам, куда можно поместить вид.Отпустите, и представление будет добавлено как подпредставление представления заголовка табличного представления.
  2. Перетащите панель навигации из библиотеки и поместите ее в пустое представление, которое вы только что добавили.
  3. ПеретащитеЭлемент панели кнопок из библиотеки и перетащите его на панель навигации.

РЕДАКТИРОВАТЬ

Проблема с вышеуказанным подходом заключается в том, что, как указывает Богатырьпанель навигации будет затем прокручиваться вместе с табличным представлением.Apple рекомендует использовать пользовательский подкласс UIViewController, который владеет как панелью навигации, так и экземпляром UITableView, размер которого соответствует размеру.К сожалению, это означает, что вам придется реализовать поведение UITableViewController, необходимое для вашего подкласса UIViewController.

Другой подход, который, кажется, работает хорошо, - это создать собственный подкласс UIViewController, которому принадлежит пробел.фоновое представление, содержащее панель навигации, а также пустое представление содержимого (экземпляр UIView), которое помещается под панелью навигации.У вашего пользовательского подкласса будет выход, указывающий на экземпляр UITableViewController в том же файле пера.

Это имеет то преимущество, что позволяет создавать и настраивать все компоненты представления в Interface Builder, и нетребуют реализации UITableViewController методов с нуля.Единственная деталь, о которой вам нужно позаботиться в родительском контроллере табличного представления, - это добавить табличное представление как подпредставление родительского представления содержимого в viewDidLoad.

Родитель может реализовать методы действия дляэлементы кнопок панели навигации и, при необходимости, реализуйте шаблон делегата.

9 голосов
/ 07 мая 2013

Начиная с iOS6, вы можете использовать вид контейнера.Итак, что вам нужно сделать, это взять контроллер View, добавить к нему панель навигации, а затем добавить контейнерное представление в тот же контроллер представления.Он автоматически добавит новую ссылку контроллера представления в ваше представление контейнера.Теперь просто удалите это, и ваш контроллер табличного представления в раскадровке.Теперь вставьте контроллер представления таблицы в представление контейнера с помощью перетаскивания элемента управления.Надеюсь, это поможет.

4 голосов
/ 21 февраля 2011

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

3 голосов
/ 21 февраля 2011

Почему в мире вы не можете перетащить навигационный элемент в файл .xib с владельцем файла, установленным в подкласс UIViewController, и подключить навигационный элемент к выходу навигационного элемента UIViewController за пределами моего понимания. Это похоже на реальную дыру в интеграции IB / XCode. Потому что вы, безусловно, можете перетащить экземпляр ViewController в файл xib и перетащить навигационный элемент в ViewController, а затем установить таким образом заголовок и barbuttonitems.

Так что, если вы хотите определить панель навигации вашего объекта подкласса UITableViewController в IB, вам нужно создать свой объект TableVC в файле xib (но не в одном файле .xib, который содержит представление таблицы для вашего UITableViewController!). Затем вы либо подключаете объект TableVC к выходу другого объекта (например, вашего делегата приложения), который работает, если вам нужен только один экземпляр вашего TVC на протяжении всего жизненного цикла вашего приложения, или если вы хотите динамически создавать экземпляры вашего приложения. TableVC в коде, который вы загружаете этот дополнительный файл .xib вручную через loadNibNamed: owner: метод параметров класса NSBundle.

1 голос
/ 01 сентября 2016

Эти шаги работали для меня в iOS 9:

  1. Добавить контроллер вида на раскадровку. Сделайте UITableViewController базовым классом.
  2. Добавьте объект панели навигации на контроллер вида сверху.
  3. Добавить табличное представление под панелью навигации.
  4. Добавление ячейки табличного представления в табличное представление.
  5. Добавить ограничения.
0 голосов
/ 24 ноября 2018

Это другой простой способ;

  1. Выберите экран TableViewController на раскадровке.
  2. Нажмите инспектор размера на символев правом меню найдите Имитация размера
  3. Изменить Фиксировано на Свободная форма

Вы можете легко добавить панель навигации.

...