簡體   English   中英

如何更改UINavigationBar中的UIBarButtonItem

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM