2010-12-28 3 views
1

Мое приложение имеет подкласс UIViewController, которым управляет UINavigationController.UIViewController: setToolbarItems vs navigationItem

В viewDidLoad моего UIViewController подкласс, я пытался добавить UIBarButtonItem на панель инструментов, как это:

settingsButton = [[UIBarButtonItem alloc] initWithTitle:@"Settings" 
    style:UIBarButtonItemStylePlain target:self action:@selector(viewSettings:)]; 
[self setToolbarItems:[NSArray arrayWithObject:settingsButton]]; 

это не работает для меня, так что через некоторое прибегая к помощи вокруг, я попытался это :

[[self navigationItem] setRightBarButtonItem:settingsButton]; 

который разработал отлично. от чтения UIViewController documentation, я все еще смущен тем, почему setToolbarItems не работает. Я проверил в отладчике, что кнопка находится в массиве toolbarItems в методе viewDidAppear. сама кнопка просто не появлялась на моей панели инструментов.

так, мой вопрос в том, почему не задалToolbarItems работать для меня в первом фрагменте кода?

У меня нет панели инструментов, настроенной в моем xib для этого контроллера вида вообще, если это имеет значение.

ответ

5

Да что делают difference.Whenever вы видите планку зрения по умолчанию для приложений на основе навигации, что является а не toolBar на самом деле, это панель навигации. Вы можете добавить элемент, ссылаясь на self.navigationItem.

+0

Хм .. Хорошая точка .. – EmptyStack

0

пытаются использовать

[toolbar setItems:[NSArray arrayWithObject:settingsButton] animated:YES]; 

вместо внесения:

[self setToolbarItems:[NSArray arrayWithObject:settingsButton]]; 

Шани

0

В приложениях ipad вы должны установить элементы панели инструментов в «topViewController» (да, это противоречит интуиции).

UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:catView]; 
UIBarButtonItem *item1 = [[UIBarButtonItem alloc] initWithTitle:@"item 1" style:UIBarButtonItemStylePlain target:nil action:nil]; 
UIBarButtonItem *item2 = [[UIBarButtonItem alloc] initWithTitle:@"item 2" style:UIBarButtonItemStylePlain target:nil action:nil]; 
[nav setToolbarHidden:NO animated:YES]; 
// WRONG: [nav setToolbarItems:[NSArray arrayWithObjects:addButton, nil]]; 
// CORRECT (for ipad apps): 
[nav.topViewController setToolbarItems:[NSArray arrayWithObjects:item1, item2, nil] animated:NO]; 
UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:nav]; 
1
  1. [само setToolbarItems: [NSArray arrayWithObject: settingsButton]]; по существу заполняет нижнюю панель панели контроллера навигации, а не кнопки «Влево» и «Вправо».

  2. Нижняя панель инструментов по умолчанию не отображается. Чтобы отобразить его, вы должны позвонить [self.navigationController setToolbarHidden: NO]

  3. Ниже приводится соответствующая документация - UINavigationController Class Reference панель:

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

@property (неатомический, только для чтения) UIToolbar * Панель инструментов Обсуждения Этого свойства содержит ссылку на встроенную панель инструментов под управлением навигации контроллером. Доступ к этой панели инструментов предоставляется исключительно для клиентов , которые хотят представить лист действий с панели инструментов. Вы не должны изменять объект UIToolbar напрямую .

Управление содержимым этой панели инструментов осуществляется с помощью настраиваемого вида контроллеров, связанных с этим контроллером навигации. Для каждого вида контроллера в стеке навигации вы можете назначить настраиваемый набор элементов панели инструментов , используя метод setToolbarItems: анимированный: UIViewController.

Видимость этой панели инструментов контролируется панелью инструментовСкрыть . Панель инструментов также подчиняется свойства hidesBottomBarWhenPushed текущего видимого контроллера и скрывается и автоматически отображается по необходимости при необходимости.

Смежные вопросы