Как добавить кнопку в UINavigationBar программно?Как добавить кнопку в UINavigationBar?
ответ
Образец кода для установки 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;
Ответы выше хороши, но я хотел бы, чтобы конкретизировать их с несколько советов:
Если вы хотите изменить заголовок кнопки «Назад» (стрелка влево от панели навигации), вы ДОЛЖНЫ делать это в контроллере представления PREVIOUS, а не в том, для которого он будет отображаться. Это похоже на высказывание «эй, если вы когда-нибудь нажмете еще один контроллер представления поверх этого, вызовите обратную кнопку« Назад »(или что-то еще) вместо стандартного».
Если вы хотите скрыть кнопку «Назад» во время специального состояния, например, пока отображается UIPickerView, используйте self.navigationItem.hidesBackButton = YES;
и не забудьте установить его обратно, когда вы покинете специальное состояние.
Если вы хотите отобразить один из специальных символических кнопок, используйте форму initWithBarButtonSystemItem:target:action
со значением, как UIBarButtonSystemItemAdd
Помните, что смысл этого символа до вас, но будьте осторожны, Руководства Human Interface. Использование UIBarButtonSystemItemAdd для обозначения удаления элемента, вероятно, приведет к отклонению вашего приложения.
Добавление пользовательской кнопки в панель навигации (с изображением для 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];
В приведенном ниже примере на панели навигации справа появится кнопка с надписью «Контакт». Его действие вызывает метод, называемый «контакт» с viewcontroller. Без этой строки правая кнопка не отображается.
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Contact"
style:UIBarButtonItemStylePlain target:self action:@selector(contact:)];;
Почему бы не использовать следующее: (от 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];
В Swift 2, вы могли бы сделать:
let rightButton: UIBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Done, target: nil, action: nil)
self.navigationItem.rightBarButtonItem = rightButton
скор 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)
}
я получаю предупреждение о стиле: параметр -> предупреждение: Семантическая Проблема: Неявное преобразование типа перечисления «UIBarButtonSystemItem» для различного типа перечисления «UIBarButtonItemStyle» – pojo
Это должно быть initWithBarButtonSystemItem: UIBarButtonSystemItemDone, чтобы избежать предупреждений. – JordanC
В этом примере я не понимаю, откуда «бар». Что такое свойство верхнего столбца по умолчанию для UINavigationItem? – aneuryzm