Làm cách nào để thêm một nút vào UINavigationBar theo lập trình?
Làm cách nào để thêm một nút vào UINavigationBar theo lập trình?
Câu trả lời:
Mã mẫu để thiết lập rightbutton
trên a 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];
Nhưng thông thường bạn sẽ có một NavigationController
, cho phép bạn viết:
UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithTitle:@"Done"
style:UIBarButtonItemStyleDone target:nil action:nil];
self.navigationItem.rightBarButtonItem = rightButton;
[rightbutton release]
theo ARC (không có vào thời điểm bình luận này được viết ban đầu).
Các câu trả lời ở trên là tốt, nhưng tôi muốn bổ sung chúng bằng một vài mẹo nữa:
Nếu bạn muốn sửa đổi tiêu đề của nút quay lại (mũi tên-y nhìn ở bên trái thanh điều hướng), bạn PHẢI thực hiện trong bộ điều khiển chế độ xem TRƯỚC, không phải bộ điều khiển mà nó sẽ hiển thị. Nó giống như nói "này, nếu bạn từng đẩy bộ điều khiển chế độ xem khác lên trên bộ điều khiển này, hãy gọi nút quay lại là" Quay lại "(hoặc bất cứ điều gì) thay vì mặc định."
Nếu bạn muốn ẩn nút quay lại trong một trạng thái đặc biệt, chẳng hạn như trong khi UIPickerView được hiển thị, hãy sử dụng self.navigationItem.hidesBackButton = YES;
và nhớ đặt lại nút này khi bạn rời khỏi trạng thái đặc biệt.
Nếu bạn muốn hiển thị một trong các nút tượng trưng đặc biệt, hãy sử dụng biểu mẫu initWithBarButtonSystemItem:target:action
có giá trị nhưUIBarButtonSystemItemAdd
Hãy nhớ rằng, ý nghĩa của biểu tượng đó là tùy thuộc vào bạn, nhưng hãy cẩn thận với Nguyên tắc giao diện con người. Sử dụng UIBarButtonSystemItemAdd có nghĩa là xóa một mục có thể sẽ khiến ứng dụng của bạn bị từ chối.
Thêm nút tùy chỉnh vào thanh điều hướng (với hình ảnh cho buttonItem và chỉ định phương pháp hành động (void) openView {} và).
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];
Ví dụ bên dưới sẽ hiển thị một nút có tiêu đề "Liên hệ" trên thanh điều hướng bên phải. Hành động của nó gọi một phương thức có tên là "contact" từ viewcontroller. Nếu không có dòng này, nút bên phải sẽ không hiển thị.
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Contact"
style:UIBarButtonItemStylePlain target:self action:@selector(contact:)];;
Trong Swift 2, bạn sẽ làm:
let rightButton: UIBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Done, target: nil, action: nil)
self.navigationItem.rightBarButtonItem = rightButton
(Không phải là một thay đổi lớn) Trong Swift 4/5, nó sẽ là:
let rightButton: UIBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItem.Style.done, target: nil, action: nil)
self.navigationItem.rightBarButtonItem = rightButton
Tại sao không sử dụng cách sau: (từ Vẽ nút Quay lại tùy chỉnh trên Thanh điều hướng của 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];
nhanh chóng 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)
}