it-swarm.com.ru

Как добавить панель навигации в UITableViewController в Интерфейсном Разработчике?

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

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

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

39
klyngbaek

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

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

48
Greeso

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

17
stephenhow

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

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

ПРАВКА

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

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

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

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

12
jlehr

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

9
cocoaNoob

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

4
dasdom

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

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

3
Bogatyr

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

  1. Добавьте View Controller в раскадровку. Сделайте UITableViewController в качестве базового класса.
  2. Добавьте объект панели навигации на контроллер вида сверху.
  3. Добавьте табличное представление под панелью навигации.
  4. Добавьте ячейку табличного представления в табличное представление.
  5. Добавить ограничения.
1
hansengj

Это другой легкий путь;

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

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

0
Ahmet Şentürk