2012-10-01 22 views
4

我在我的應用程序的導航欄中添加了一個編輯按鈕。UIViewController編輯按鈕狀態總是相同

我有一個UIViewController實現UITableViewDataSource和UITableViewDelegate。

我使用故事板添加了UITableView,並建立了與數據源和委託的連接。

我不喜歡這樣的視圖控制器的實現文件:

self.navigationItem.rightBarButtonItem = self.editButtonItem; 
[self.editButtonItem setAction:@selector(setEditing:animated:)]; 

- (void)setEditing:(BOOL)editing animated:(BOOL)animated 
{ 
    DLog(@"Editing = %d", editing) 
    NSLog(editing ? @"Yes" : @"No"); 

    [self.recentSearchList setEditing:editing animated:YES]; 
} 

的問題是,每當我在編輯按鈕點擊,布爾變量「編輯」始終是「是」。首先它將UITableView設置爲編輯模式,但編輯按鈕仍然顯示「編輯」標籤而不是「完成」。並且由於該參數始終爲YES,因此表視圖從不設置爲普通模式。

我從答案在這裏讀到:UITableView in edit mode - 'Edit' button doesn't change status

我假設的編輯按鈕應該改變攻其狀態本身。重寫的方法中的參數也應該切換。

我可以編寫自己的代碼在UIViewController中設置標誌來檢查模式並相應地切換tableView,但我假設必須有其他方式。

回答

6

從文檔

enter image description here

此外刪除行[self.editButtonItem setAction:@selector(setEditing:animated:)];

editButtonItem被隱式地與所述方法相關聯的- (void)setEditing:(BOOL)editing animated:(BOOL)animated

所以你只需重寫該方法並在文檔所述的頂部調用super的實現。

0

我想如果你仔細觀察,你會發現編輯實際上是對控制本身的引用。

當您在UIControl上調用setAction(在這種情況下,您的右鍵)時,您的目標可以具有以下簽名之一。

- (void)action 
- (void)action:(id)sender 
- (void)action:(id)sender forEvent:(UIEvent *) 

你必須在這個方法中分別處理編輯模式。