Як додати кнопку до 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;
[rightbutton release]
в АРК (чого не було в той час, коли цей коментар був написаний спочатку).
Відповіді вище хороші, але я хотів би їх деталізувати ще кількома порадами:
Якщо ви хочете змінити заголовок кнопки "Назад" (стрілка-y дивиться на ліворуч від панелі навігації), ОБОВ'ЯЗКОВО це зробити в попередньому контролері перегляду, а не в тому, для якого воно відображатиметься. Це як сказати "ей, якщо ви коли-небудь натисніть інший контролер перегляду поверх цього, зателефонуйте кнопку" Назад "(або що завгодно) замість типового".
Якщо ви хочете приховати кнопку повернення під час спеціального стану, наприклад, під час відображення UIPickerView, використовуйте self.navigationItem.hidesBackButton = YES;
та пам'ятайте, щоб повернути її, коли виходите із спеціального стану.
Якщо ви хочете відобразити одну із спеціальних символьних кнопок, використовуйте форму initWithBarButtonSystemItem:target:action
зі значенням типуUIBarButtonSystemItemAdd
Пам’ятайте, значення цього символу залежить від вас, але будьте уважні до Інструкції щодо людського інтерфейсу. Використання UIBarButtonSystemItemAdd для означає видалення елемента, ймовірно, ваш додаток буде відхилено.
Додавання спеціальної кнопки до панелі навігації (із зображенням для buttonItem та вказівкою способу дії (недійсним) 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];
У наведеному нижче прикладі буде відображатися кнопка з заголовком "Контакт" на навігаційній панелі праворуч. Його дія викликає метод, який називається "контактом" від контролера перегляду. Без цього рядка права кнопка не видно.
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Contact"
style:UIBarButtonItemStylePlain target:self action:@selector(contact:)];;
У Swift 2 ви зробите:
let rightButton: UIBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Done, target: nil, action: nil)
self.navigationItem.rightBarButtonItem = rightButton
(Не основна зміна) У Swift 4/5 це буде:
let rightButton: UIBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItem.Style.done, target: nil, action: nil)
self.navigationItem.rightBarButtonItem = rightButton
Чому б не скористатися наступним: (з Накреслити користувацьку кнопку Назад на панелі навігації iPhone )
// 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
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)
}