UIToolbar на каждой странице UINavigationController - PullRequest
11 голосов
/ 22 февраля 2010

У меня есть приложение, которое работает на 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];

На мой взгляд, контроллер я пробовал это:

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

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

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

Ответы [ 3 ]

42 голосов
/ 22 февраля 2010

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

[self.navigationController setToolbarHidden:NO];

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

[self setToolbarItems:items];

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

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

1 голос
/ 24 июля 2011

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

0 голосов
/ 13 мая 2015

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

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

...