[英]How to change a UIBarButtonItem in a UINavigationBar
我正在嘗試設置可以編輯的項目列表。 我有一個主視圖,頂部有一個UINavigationBar,下面有一個UITableView。 我想在點擊時將“編輯”按鈕更改為“完成”按鈕,但我無法弄清楚如何操作。
如果我可以在代碼中完成它(不是它的界面構建器),我可以替換它,但我甚至不能這樣做。 我見過一些使用[self.navigationItem]的代碼,但在我看來,self是一個UIView。
當我不想導航時(這只是一頁),使用UINavigationBar也感覺有點奇怪,但我想要一個帶有標題和按鈕的工具欄,所以我認為沒有選擇。
我創建了一個可以從編輯更改為完成的按鈕。 這是來自更多iPhone開發書的一個提示。
- (void)viewDidLoad {
[super viewDidLoad];
UIBarButtonItem *editButton = self.editButtonItem;
[editButton setTarget:self];
[editButton setAction:@selector(toggleEdit)];
self.navigationItem.leftBarButtonItem = editButton;
}
和方法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];
}
然后你不需要更換任何一個。
當您使用self.editButtonItem
,您無需更改按鈕的樣式和文本,它會自動完成。 嘗試刪除該代碼,它仍然可以工作:)
在IB中設置導航按鈕,並在IB中鏈接以下內容並創建一個名為editOutlet的插座,並在頭文件中創建一個名為editToggle的操作,您的方法就像這樣簡單:
-(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];
}
}
得到它了! 看起來您可以使用topItem屬性訪問UINavigationItem。 只需要像往常一樣閱讀文檔!
你可以嘗試一下
[self setValue:viewController.navigationItem forKey:@"_navigationItem"];
[self.navigationController setNavigationBarHidden:YES animated:NO];
[self.navigationController setNavigationBarHidden:NO animated:NO];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.