2010-03-23 4 views

ответ

289

Образец кода для установки rightbutton на NavigationBar.

UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" 
    style:UIBarButtonItemStyleDone target:nil action:nil]; 
UINavigationItem *item = [[UINavigationItem alloc] initWithTitle:@"Title"]; 
item.rightBarButtonItem = rightButton; 
item.hidesBackButton = YES; 
[bar pushNavigationItem:item animated:NO]; 

Но, как правило, вы бы NavigationController, что позволяет написать:

UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" 
    style:UIBarButtonItemStyleDone target:nil action:nil]; 
self.navigationItem.rightBarButtonItem = rightButton; 
+1

я получаю предупреждение о стиле: параметр -> предупреждение: Семантическая Проблема: Неявное преобразование типа перечисления «UIBarButtonSystemItem» для различного типа перечисления «UIBarButtonItemStyle» – pojo

+3

Это должно быть initWithBarButtonSystemItem: UIBarButtonSystemItemDone, чтобы избежать предупреждений. – JordanC

+2

В этом примере я не понимаю, откуда «бар». Что такое свойство верхнего столбца по умолчанию для UINavigationItem? – aneuryzm

20

Ответы выше хороши, но я хотел бы, чтобы конкретизировать их с несколько советов:

Если вы хотите изменить заголовок кнопки «Назад» (стрелка влево от панели навигации), вы ДОЛЖНЫ делать это в контроллере представления PREVIOUS, а не в том, для которого он будет отображаться. Это похоже на высказывание «эй, если вы когда-нибудь нажмете еще один контроллер представления поверх этого, вызовите обратную кнопку« Назад »(или что-то еще) вместо стандартного».

Если вы хотите скрыть кнопку «Назад» во время специального состояния, например, пока отображается UIPickerView, используйте self.navigationItem.hidesBackButton = YES; и не забудьте установить его обратно, когда вы покинете специальное состояние.

Если вы хотите отобразить один из специальных символических кнопок, используйте форму initWithBarButtonSystemItem:target:action со значением, как UIBarButtonSystemItemAdd

Помните, что смысл этого символа до вас, но будьте осторожны, Руководства Human Interface. Использование UIBarButtonSystemItemAdd для обозначения удаления элемента, вероятно, приведет к отклонению вашего приложения.

11

Добавление пользовательской кнопки в панель навигации (с изображением для buttonItem и указанием метода действия (void) openView {} и).

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
button.frame = CGRectMake(0, 0, 32, 32); 
[button setImage:[UIImage imageNamed:@"settings_b.png"] forState:UIControlStateNormal]; 
[button addTarget:self action:@selector(openView) forControlEvents:UIControlEventTouchUpInside]; 

UIBarButtonItem *barButton=[[UIBarButtonItem alloc] init]; 
[barButton setCustomView:button]; 
self.navigationItem.rightBarButtonItem=barButton; 

[button release]; 
[barButton release]; 
7

В приведенном ниже примере на панели навигации справа появится кнопка с надписью «Контакт». Его действие вызывает метод, называемый «контакт» с viewcontroller. Без этой строки правая кнопка не отображается.

self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Contact" 
                      style:UIBarButtonItemStylePlain target:self action:@selector(contact:)];; 

enter image description here

2

Почему бы не использовать следующее: (от Draw custom Back button on iPhone Navigation Bar)

// Add left 
UINavigationItem *previousItem = [[UINavigationItem alloc] initWithTitle:@"Back title"]; 
UINavigationItem *currentItem = [[UINavigationItem alloc] initWithTitle:@"Main Title"]; 
[self.navigationController.navigationBar setItems:[NSArray arrayWithObjects:previousItem, currentItem, nil] animated:YES]; 

// set the delegate to self 
[self.navigationController.navigationBar setDelegate:self]; 
3

В Swift 2, вы могли бы сделать:

let rightButton: UIBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Done, target: nil, action: nil) 
self.navigationItem.rightBarButtonItem = rightButton 
0

скор 3

let cancelBarButton = UIBarButtonItem(title: "Cancel", style: .done, target: self, action: #selector(cancelPressed(_:))) 
    cancelBarButton.setTitleTextAttributes([NSFontAttributeName : UIFont.cancelBarButtonFont(), 
                  NSForegroundColorAttributeName : UIColor.white], for: .normal) 
    self.navigationItem.leftBarButtonItem = cancelBarButton 


    func cancelPressed(_ sender: UIBarButtonItem) { 
     self.dismiss(animated: true, completion: nil) 
    }