Подтвердить что ты не робот

Как добавить панель навигации в UITableViewController в Interface Builder?

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

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

Спасибо заранее.

4b9b3361

Ответ 1

В представлении схемы убедитесь, что выбран Контроллер таблиц.

Затем перейдите в меню Редактор и выберите подменю Вставить и выберите Контроллер навигации и вуаля. У вас есть контроллер навигации, указывающий на ваш контроллер таблиц с встроенными отношениями.

Ответ 2

Для представления таблицы с кнопкой редактирования вверху используйте UINavigationController с UITableView как rootView. Это означает, что вы собираетесь создать пользовательский подкласс UITableView для представления в таблице и использовать его как rootView вашего экземпляра 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;
}

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

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

Ответ 3

Я согласен с тем, что трудно понять, как это сделать в интерфейсе Builder, но, к счастью, можно добавить панель навигации и элемент панели бара в таблицу View this way. Вот как это сделать:

  • Перетащите пустое представление (экземпляр UIView) из библиотеки в область, расположенную в верхней части таблицы. По мере того как вы перетаскиваете область цели, Interface Builder выделит ее синим цветом, чтобы показать вам, куда следует отбросить представление. Отпустите, и представление будет добавлено как подзаголовок представления заголовка таблицы.
  • Перетащите панель навигации из библиотеки и опустите ее в пустой список. Вы просто добавили.
  • Перетащите элемент "Панель" из библиотеки и опустите его на панель навигации.

ИЗМЕНИТЬ

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

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

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

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

Ответ 7

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

  • Добавить контроллер просмотра в раскадровку. Сделать UITableViewController базовым классом.
  • Добавьте объект панели навигации в контроллер просмотра вверху.
  • Добавить таблицу в виде панели навигации.
  • Добавить таблицу со списком в таблицу.
  • Добавить ограничения.