Как программно добавить NavigationBarItem и UIBarButtonItem? - PullRequest
0 голосов
/ 16 декабря 2011

Я представил представление, используя вызов presentModalViewController.

В моем новом представлении не было навигационной панели, поэтому я добавил ее из библиотеки, но теперь, когда создал UIBarButtonItem в viewDidLoad моего контроллера и установил rightBarButtonItem navigationBarItem ,

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

Я пропустил шаг или что-то?

Ответы [ 3 ]

0 голосов
/ 16 декабря 2011

Я думал, что свойство navigationBarItem в UIViewController работает, только если ваш ViewController присутствует с UINavigationController

, если вы добавляете панель навигации с помощью построителя интерфейса или добавляете ее с кодом, вам необходимо использовать - (void) pushNavigationItem: (UINavigationItem *) анимированный элемент: (BOOL) анимированный

для добавления UINavigationItem самостоятельно

вы можете создать UINavigationController, использовать - (id) initWithRootViewController: (UIViewController *) yourViewController

1007 ** и используйте presentModalViewController, чтобы показать UINavigationController, который вы создаете

, затем вы можете использовать свойство navigationBarItem UIViewController, чтобы установить rightBarButtonItem в viewDidLoad

0 голосов
/ 29 мая 2013

На самом деле это проще, чем это:

  1. Перетащите UINavigationBar в свое приложение. Обратите внимание, что вы также получите UINavigationItem, когда сделаете это ... убедитесь, что вы сохранили его.

  2. Добавьте следующее свойство в ваше приложение:

    @property (weak, nonatomic) IBOutlet UINavigationItem *navigationItem;

  3. Xcode, скорее всего, укажет на ошибку (вы переопределяете встроенное свойство UIViewController), поэтому вам придется вручную синтезировать метод получения и установки. Добавьте следующую строку под оператором @implementation для класса:

    @synthesize navigationItem;

  4. В Интерфейсном Разработчике перетащите соединение из нового свойства navigationItem в пользовательский элемент навигации.

Теперь вы можете получить доступ к элементу навигации с помощью self.navigationItem, как и обычно.

0 голосов
/ 16 декабря 2011

Простое добавление панели навигации вручную не сделает свойство self.navigationController актуальным, а его значение будет nil, которое, я полагаю, вы используете для добавления экземпляра UIBarButtonItem.

ЧтоЯ бы рекомендовал объявить IBOutlet UINavigationBar в вашем контроллере, подключить его в редакторе NIB с добавленной панелью навигации и после этого в viewDidLoad использовать что-то вроде:

@interface ...
@property (nonatomic, retain) IBOutlet UINavigationBar *theBar;
@end

@implementation ...
@synthesize theBar;

-(void)viewDidLoad {
  [super viewDidLoad];

  UIBarButtonItem *yourButton = ...;

  UINavigationItem *item = [[UINavigationItem alloc] initWithTitle:@"MyTitle"];
  item.rightBarButtonItem = yourButton;

  [theBar pushNavigationItem: item animated:NO];
  [item release];

  ...
}

@end
...