2010-03-23 37 views

Trả lời

289

Mã mẫu để đặt rightbutton trên 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; 
+1

tôi nhận được một cảnh báo trên phong cách: tham số -> cảnh báo: Semantic Vấn đề: chuyển đổi ngầm từ kiểu enumeration 'UIBarButtonSystemItem' để kiểu enumeration khác nhau 'UIBarButtonItemStyle' – pojo

+3

này cần được initWithBarButtonSystemItem: UIBarButtonSystemItemDone để tránh các cảnh báo. – JordanC

+2

Trong ví dụ này, tôi không hiểu "thanh" đến từ đâu. Thuộc tính thanh trên cùng mặc định cho UINavigationItem là gì? – aneuryzm

20

Những câu trả lời trên là tốt, nhưng tôi muốn xác thịt chúng ra với một vài mẹo khác:

Nếu bạn muốn sửa đổi tiêu đề của nút quay lại (mũi tên trông y ở bên trái thanh điều hướng), bạn PHẢI làm điều đó trong bộ điều khiển xem PREVIOUS, không phải là nút mà nó sẽ hiển thị. Nó giống như nói "hey, nếu bạn bao giờ đẩy một bộ điều khiển xem trên đầu này, hãy gọi nút quay lại" Back "(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 trạng thái đặc biệt, chẳng hạn như khi UIPickerView được hiển thị, hãy sử dụng self.navigationItem.hidesBackButton = YES; và nhớ đặt lại 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 biểu tượng đặc biệt, sử dụng mẫu initWithBarButtonSystemItem:target:action với một 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 của Hướng dẫn Human Interface. Sử dụng UIBarButtonSystemItemThêm vào việc xóa một mục có thể sẽ khiến ứng dụng của bạn bị từ chối.

11

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 thức 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]; 
7

Ví dụ bên dưới sẽ hiển thị 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:)];; 

enter image description here

2

Tại sao không sử dụng sau đây: (từ 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

Trong Swift 2, bạn sẽ làm gì:

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

nhanh chóng 3

0.123.
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) 
    } 
Các vấn đề liên quan