Jak programowo dodać przycisk do UINavigationBar?
Jak programowo dodać przycisk do UINavigationBar?
Odpowiedzi:
Przykładowy kod do ustawienia rightbutton
na 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];
Ale normalnie miałbyś NavigationController
, umożliwiający ci napisanie:
UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithTitle:@"Done"
style:UIBarButtonItemStyleDone target:nil action:nil];
self.navigationItem.rightBarButtonItem = rightButton;
[rightbutton release]
pod ARC (którego nie było w momencie, gdy ten komentarz był pierwotnie pisany).
Powyższe odpowiedzi są dobre, ale chciałbym je rozwinąć kilkoma dodatkowymi wskazówkami:
Jeśli chcesz zmodyfikować tytuł przycisku wstecz (strzałka-y patrząc po lewej stronie paska nawigacji), MUSISZ zrobić to w kontrolerze widoku POPRZEDNI, a nie w tym, dla którego będzie wyświetlany. To tak, jakby powiedzieć „hej, jeśli kiedykolwiek wrzucisz inny kontroler widoku na ten, wywołaj przycisk Wstecz„ Wstecz ”(lub cokolwiek innego) zamiast domyślnego”.
Jeśli chcesz ukryć przycisk Wstecz w specjalnym stanie, na przykład podczas wyświetlania UIPickerView, użyj self.navigationItem.hidesBackButton = YES;
i pamiętaj, aby ustawić go z powrotem po opuszczeniu specjalnego stanu.
Jeśli chcesz wyświetlić jeden ze specjalnych przycisków symbolicznych, użyj formularza initWithBarButtonSystemItem:target:action
z wartością taką jakUIBarButtonSystemItemAdd
Pamiętaj, znaczenie tego symbolu zależy od Ciebie, ale uważaj na Wytyczne dotyczące interfejsu ludzkiego. Użycie UIBarButtonSystemItemAdd oznacza, że usunięcie elementu prawdopodobnie spowoduje odrzucenie aplikacji.
Dodanie przycisku niestandardowego do paska nawigacji (z obrazem dla buttonItem i określeniem metody akcji (void) openView {} i).
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];
Poniższy przykład wyświetli przycisk z tytułem „Kontakt” na pasku nawigacji po prawej stronie. Jego akcja wywołuje metodę o nazwie „contact” z kontrolera widoku. Bez tej linii prawy przycisk nie jest widoczny.
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Contact"
style:UIBarButtonItemStylePlain target:self action:@selector(contact:)];;
W Swift 2 zrobiłbyś:
let rightButton: UIBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Done, target: nil, action: nil)
self.navigationItem.rightBarButtonItem = rightButton
(Nie jest to duża zmiana) W Swift 4/5 będzie to:
let rightButton: UIBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItem.Style.done, target: nil, action: nil)
self.navigationItem.rightBarButtonItem = rightButton
Dlaczego nie użyć następujących: (z Rysuj niestandardowy przycisk Wstecz na pasku nawigacyjnym iPhone'a )
// 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];
szybki 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)
}