UIToolbar на каждой странице UINavigationController

У меня есть приложение, которое работает на UINavigationController. Теперь я хотел бы добавить элемент UIToolbar в конец каждого экрана. Панель инструментов внизу должна быть настраиваемой для ViewController, которая в настоящее время отображается. Моя первая идея состояла в том, чтобы просто добавить панель инструментов в представление navigationController и пометить ее, в viewController я подумал, что тогда я смогу получить элемент UIToolbar. У меня есть следующий код:

В моем AppDelegate:

// Get instance of Toolbar  (navController is an instance of UINavigationController and TOOLBAR_TAG a constant)
UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 440, 320, 40)];
toolbar.tag = TOOLBAR_TAG;
[navController.view addSubview:toolbar];

В моем представлении Controller я пробовал это:

UIToolbar *toolbar = [self.navigationController.view viewWithTag:TOOLBAR_TAG];
toolbar.barStyle = UIBarStyleBlack;

Но это дает мне ошибку, говоря, что панель инструментов в моем случае является объектом "UILayoutContainerView", а не объектом UIToolbar. Следовательно, эта идея кажется тупиковой.

Как другие решают эту проблему?

Ответ 1

У UINavigationController уже есть панель инструментов. Просто используйте

[self.navigationController setToolbarHidden:NO];

в верхнем контроллере представления и

[self setToolbarItems:items];

во всех контроллерах вашего вида, где элементы являются NSArray элементов панели инструментов этого вида.

РЕДАКТИРОВАТЬ: Что касается того, почему ваше решение не работает: ваш TOOLBAR_TAG, вероятно, не уникален, поэтому вы получаете другое подзаголовок. Но, как я уже сказал, вы все равно должны использовать панель инструментов.

Ответ 2

Чтобы легко отобразить нижнюю панель инструментов UINavigationController, вы можете щелкнуть галочку "Показать панель инструментов", доступную от инспектора с выбранным объектом "Контроллер навигации". Надеюсь, это может помочь:)

Ответ 3

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

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