7

В iPhone OS 3.0 вы можете настроить элементы панели инструментов UINavigationController с помощью метода setToolbarItems:animated:. Однако для этого требуется передать массив элементов UIToolbarItems. Хотя я мог программно создавать эти элементы панели инструментов, я бы скорее их создал в Interface Builder, если это было возможно.Настройка панели инструментов Элементы UINavigationController

Учитывая это, я создал UIToolbar в «MyGreatViewController.xib» и заполнил его необходимыми элементами панели инструментов. Затем, в «MyGreatViewController.m», я получаю элементы из панели инструментов и передать их setToolbarItems:animated::

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [self setToolbarItems: [toolbar items]]; 
} 

... где toolbar приведен IBOutlet со ссылкой на UIToolbar.

Это хороший подход? Есть ли лучший способ сделать это? Должен ли я просто создавать элементы программно?

+0

Я не понимаю, что-то: Вы говорите: «Я получить элементы с панели инструментов ", но затем вы вернете их на панель инструментов? Разве они уже не отображаются? – Oscar

ответ

4

Это вполне приемлемый способ сделать это, но имейте в виду, что загрузка xib-файлов довольно дорого на iPhone, и, возможно, быстрее создать элементы панели инструментов программным способом в вашем методе viewDidLoad.

+3

Отлично. Поскольку XIB уже загружается, когда класс контроллера представления инициализируется (я проверил «С XIB для пользовательского интерфейса» при создании файлов контроллера представления), этот подход не должен быть более дорогим, чем программное создание элементов панели инструментов. –

+0

Ах, если вы уже загружаете XIB, тогда вы не добавите слишком много дополнительного времени. Unarchiving объекты из XIB * * дороже, чем создание их в коде, но если ваше представление не займет много времени, я бы не стал беспокоиться об этом. – iKenndac

12

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

К примеру, вот что мы можем сделать (с помощью Xcode 3.2 на Snow Leopard):

  1. File-> New Project .... Выберите Навигация на основе приложений и создать проект.
  2. Открыть MainWindow.xib в интерфейсе Builder.
  3. Выберите контроллер навигации, а в инспекторе атрибутов установите флажок «Показывать панель инструментов». Это приведет к появлению объекта панели инструментов.
  4. Перетащите элемент бара из библиотеки на панель инструментов. Он появится на панели инструментов. Если вы проверите иерархию в NIB, вы увидите, что этот новый элемент является дочерним элементом RootViewController.

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

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

+0

Я считаю, что так оно и должно быть. Подобно 'UIViewController', магически загружая xib, если он имеет соответствующее имя файла. – Sneakyness

+0

Он работает! Я думаю, это, безусловно, лучший способ настроить панель инструментов в режиме навигации. – Nathan

+0

В моем приложении у меня есть контроллер панели вкладок, и одна из вкладок - это navigationController - довольно стандартная конфигурация. Однако, если я последую тому, что предлагает Кристофер, после шага 3 панель инструментов появляется за панель вкладок в IB! И когда я пытаюсь выполнить шаг 4 (я попытался добавить элемент управления сегментом/кнопку), он просто не позволяет мне опустить его на панель инструментов. Я что-то упустил? – Dev