Настройка элементов панели инструментов UINavigationController
Вопрос
В iPhone OS 3.0 вы можете установить элементы панели инструментов UINavigationController с помощью setToolbarItems:animated:
метод.Однако для этого необходимо передать массив UIToolbarItems.Хотя я мог бы создавать эти элементы панели инструментов программно, я бы предпочел создать их в Interface Builder, если это возможно.
Имея это в виду, я создал панель UIToolbar в «MyGreatViewController.xib» и заполнил ее нужными элементами панели инструментов.Затем в «MyGreatViewController.m» я получаю элементы с панели инструментов и передаю их setToolbarItems:animated:
:
- (void)viewDidLoad {
[super viewDidLoad];
[self setToolbarItems: [toolbar items]];
}
...где toolbar
— это IBOutlet, ссылающийся на UIToolbar.
Это хороший подход?Есть ли лучший способ добиться этого?Должен ли я просто создавать элементы программно?
Решение
Это вполне приемлемый способ сделать это, но имейте в виду, что загрузка файлов xib на iPhone обходится довольно дорого, и вполне возможно, что программное создание элементов панели инструментов в вашем методе viewDidLoad может быть быстрее.
Другие советы
Я не знаю, задокументировано ли это где-нибудь, но я обнаружил, что в Interface Builder, если вы включите панель инструментов контроллера навигации, вы можете перетаскивать элементы панели на контроллер представления, и они автоматически появятся на панели инструментов контроллера навигации. .
Например, вот что мы можем сделать (используя Xcode 3.2 на Snow Leopard):
- Файл->Новый проект....Выбирать Приложение на основе навигации и создайте проект.
- Открыть
MainWindow.xib
в конструкторе интерфейсов. - Выберите контроллер навигации и в инспекторе атрибутов установите флажок «Показать панель инструментов».Это приведет к появлению объекта Toolbar.
- Перетащите элемент кнопки панели из библиотеки на панель инструментов.Он появится на панели инструментов.Если вы проверите иерархию в NIB, вы увидите, что этот новый элемент является дочерним элементом
RootViewController
.
Кажется, что любые элементы кнопок панели, добавленные как дочерние элементы элемента навигации, будут отображаться на панели навигации, а любые элементы кнопок панели, добавленные как дочерние элементы контроллера представления, будут отображаться на панели инструментов.
(Я наткнулся на это случайно.Если кто-нибудь сможет найти документацию по этому поведению или любую дополнительную информацию, я хотел бы услышать об этом.)