Làm cách nào để thêm một nút vào UINavigationBar?


Câu trả lời:


294

Mã mẫu để thiết lập rightbuttontrê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;

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

3
Đây phải là initWithBarButtonSystemItem: UIBarButtonSystemItemDone để tránh cảnh báo.
JordanC

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

Biến thanh trong câu trả lời là bất kỳ thanh điều hướng nào không được quản lý bởi bộ điều khiển điều hướng. Nếu bạn có bộ điều khiển điều hướng, nó có một thanh điều hướng riêng mà nó quản lý - trong trường hợp này, mỗi bộ điều khiển chế độ xem mà bạn đẩy đến bộ điều khiển điều hướng phải định cấu hình mục điều hướng của riêng nó (bao gồm việc đặt rightBarButtonItem trong điều hướng riêng của nó bất động sản).
Vasiliy Kulakov

Đối với độc giả hiện tại, tôi không tin rằng có bất kỳ lý do gì để gọi [rightbutton release]theo ARC (không có vào thời điểm bình luận này được viết ban đầu).
cacbocation

20

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:actioncó 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.


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 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];

7

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:)];;

nhập mô tả hình ảnh ở đây


3

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

2

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];

0

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)
    }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.