2010-04-03 30 views
7

Tôi đang cố gắng thiết lập danh sách các mục có thể chỉnh sửa được. Tôi có một cái nhìn chính, với một UINavigationBar ở đầu và một UITableView trực tiếp dưới nó. Tôi muốn thay đổi nút "chỉnh sửa" thành nút "xong" khi nhấp, nhưng tôi không thể tìm ra cách thực hiện.Cách thay đổi UIBarButtonItem trong UINavigationBar

Nếu tôi có thể làm điều đó trong mã (không phải trình tạo giao diện), tôi chỉ có thể thay thế nó, nhưng tôi thậm chí không thể làm điều đó. Tôi đã nhìn thấy một số mã bằng cách sử dụng [self.navigationItem], nhưng trong trường hợp của tôi tự là một UIView. Nó cũng cảm thấy hơi lạ khi sử dụng một UINavigationBar khi tôi không muốn điều hướng (đây chỉ là một trang), nhưng tôi muốn một thanh công cụ với một tiêu đề và một nút, vì vậy tôi không nghĩ rằng thực sự có một sự lựa chọn.

Trả lời

15

Tôi tạo một nút có thể thay đổi từ Chỉnh sửa thành Xong. Đó là một mẹo từ cuốn sách Phát triển iPhone khác.

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    UIBarButtonItem *editButton = self.editButtonItem; 
    [editButton setTarget:self]; 
    [editButton setAction:@selector(toggleEdit)]; 
    self.navigationItem.leftBarButtonItem = editButton; 
} 

Và phương pháp toggleEdit

- (IBAction)toggleEdit { 
    BOOL editing = !self.tableView.editing; 
    self.navigationItem.rightBarButtonItem.enabled = !editing; 
    if (editing) { 
    self.navigationItem.leftBarButtonItem.title = NSLocalizedString(@"Done", @"Done"); 
    //Added in the edition for this button has the same color of the UIBarButtonSystemItemDone 
    self.navigationItem.leftBarButtonItem.style = UIBarButtonItemStyleDone; 
} 
else{ 
    self.navigationItem.leftBarButtonItem.title = NSLocalizedString(@"Edit", @"Edit"); 
    //Added in the edition for this button has the same color of the UIBarButtonSystemItemDone 
    self.navigationItem.leftBarButtonItem.style = UIBarButtonItemStylePlain; 
} 
    [self.tableView setEditing:editing animated:YES]; 
} 

Sau đó, bạn không cần phải thay thế bất kỳ trong số họ.

+0

Ah, yeah, đó có vẻ tốt. Mặc dù, tôi không nghĩ rằng bạn có được phong cách "Xong" đẹp như vậy, nơi mà nút có màu hơi khác một chút. –

+0

Bây giờ với sự thay đổi của phong cách, nút DONE của mã này là chính xác bằng UIBarButtonSystemItemDone. – wal

0

OK! Có vẻ như bạn có thể truy cập UINavigationItem bằng cách sử dụng thuộc tính topItem. Chỉ cần đọc qua các tài liệu, như mọi khi!

4

Khi bạn sử dụng self.editButtonItem, bạn không cần phải thay đổi kiểu và văn bản của nút, nó được thực hiện tự động. Hãy thử xóa mã đó, mã sẽ vẫn hoạt động :)

2

thiết lập nút điều hướng trong IB với liên kết sau trong IB và tạo một lối ra có tên là editOutlet và một hành động được gọi là editToggle trong tệp tiêu đề của bạn và phương pháp của bạn dễ dàng như này:

-(IBAction) editToggle:(id) sender { 

if (self.tableViewOutlet.isEditing == NO) { 

    self.editOutlet.title = NSLocalizedString(@"Done", @"Done"); 
    self.editOutlet.style = UIBarButtonItemStyleDone; 
    [self.tableViewOutlet setEditing:YES animated:YES]; 

}else { 
    self.editOutlet.title = NSLocalizedString(@"Edit", @"Edit"); 
    self.editOutlet.style = UIBarButtonItemStylePlain; 
    [self.tableViewOutlet setEditing:NO animated:YES]; 

    } 
} 
0

bạn có thể thử nó

[self setValue:viewController.navigationItem forKey:@"_navigationItem"]; 
[self.navigationController setNavigationBarHidden:YES animated:NO]; 
[self.navigationController setNavigationBarHidden:NO animated:NO]; 
Các vấn đề liên quan