Вопрос по iphone, uikit, objective-c, cocoa – Постоянный UIBarButtonItem в UIToolbar?

2

Я разрабатывал приложение для iPhone, которое использует панель UIToolbar (в контексте UINavigationController) для отображения маленького значка состояния в нижней части экрана. С панелью инструментов в конечном итоге также будут связаны значки действий (например, почтовое приложение).

Я столкнулся с проблемой, когда кажется, что каждый UIViewController, помещенный в стек контроллера навигации, должен иметь свой собственный набор элементов для отображения на панели инструментов, и, как следствие, «status» элемент исчезает и возвращается для каждого перехода представления.

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

Ваш Ответ

3   ответа
0

CGFloat height = [self.toolbar frame].size.height;
CGRect rootBounds = self.window.rootViewController.view.bounds;
CGRect frame = CGRectMake(0, CGRectGetHeight(rootBounds) - height, CGRectGetWidth(rootBounds), height);   
[self.toolbar setFrame:frame];
[self.navigationController.view addSubview:self.toolbar];
7

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

Если вы используете шаблон приложения для навигации и используете Interface Builder, выполните следующие действия.should сделай это:

Open up your app delegate's .h file. Add an IBOutlet UIToolbar * toolbar; to the app delegate's instance variables. Switch to the .m file. Find the line that reads [window addSubview:[navigationController view]]; and add after it:
CGRect frame = navigationController.view.frame;
frame.size.height -= toolbar.frame.size.height;
navigationController.view.frame = frame; Add code to release toolbar in the -dealloc method. Open MainWindow.xib. Open the window. Drag a toolbar onto the bottom of the window. Connect the toolbar to the app delegate's toolbar outlet Now set up the toolbar—add whatever items you need to it, then create whatever outlets and actions you need in the app delegate and connect them.

Поскольку панель инструментов является частью окна, а не частью контроллера навигации, контроллер навигации не должен касаться ее.

Хорошо, но как этот подход повлияет на мою способность добавлять или удалять кнопки для каждого контроллера вида? Я все еще хотел бы иметь эту способность. Tim
В качестве альтернативы, Тим, используйте принцип Брента, чтобы просто добавить кнопку (или сегментированный элемент управления и т. Д. И т. Д.). Затем у вас появляется кнопка "выше" панель инструментов, которая всегда остается там, пока вы ее не скроете. Я использовал этот подход для добавления сегментированного элемента управления на нижнюю панель инструментов (обычно вы можете добавить его только в верхнюю часть контроллера навигации), поэтому я могу убедиться, что он работает именно так, как вам нужно.
ребята, это действительно сработало? похоже, мой tableView попадает под панель навигации ... есть идеи?
Отлично, спасибо Brent / h4xxr! Tim
Хороший ответ, Брент, это был бы и мой ответ. Тим, вы все равно можете настроить панель инструментов для каждого вида, если вам нужно - когда основной вид изменится, сообщите панели инструментов, какие кнопки показывать, а какие скрывать.
0

панели инструментов будут заменены представлениями с панели инструментов представления в верхней части стека.

Даже если у вас есть статическое представление (представление, которое не изменяется при добавлении нового контроллера), представление все равно будет выглядеть новым, поскольку анимация, которую Apple включает, когда вы помещаете новый контроллер представления в стек.

если анимация не покрывает панель инструментов, то элементы не должны меняться правильно ???
Но каждый контроллер представления содержит свой собственный набор элементов на панели инструментов (или контроллер навигации различает наборы элементов для каждого контроллера представления). Поэтому всякий раз, когда я перехожу,view не перемещается по панели инструментов, ноitems на панели инструментов "изменить" - даже если два набора предметов оказываются одинаковыми. Это вызывает эффект затухания, который я пытаюсь избежать. Tim
Но эта анимация скользящего вида не распространяется на панель инструментов - единственная анимация, с которой мне приходится иметь дело, - это постепенное исчезновение [UIToolbar setItems: animated:]. Сами Apple, кажется, победили это в Mail - смотрите пункт «Обновить», когда вы переходите от списка писем к одному письму. Tim

Похожие вопросы