2011-06-15 180 views
0

我有一個按鈕(UINavigationBarItem)用於編輯我的UITableView,它只允許刪除。所以當我按下刪除鍵時,每條單元格旁邊會出現一條紅色的小線,我可以刪除每一行。UITableView編輯不起作用

當按下按鈕時,下面的函數調用:

-(void)editButtonSelected:(id)sender { 

    if(self.editing) 
     NSLog(@"self.editing = true"); 
    else 
     NSLog(@"self.editing = false"); 

    if(self.editing) { 
     [super setEditing:NO animated:NO]; 
     [tableView setEditing:NO animated:NO]; 
     [tableView reloadData]; 
     [leftButton setTitle:@"Delete"]; 
     [leftButton setStyle:UIBarButtonItemStylePlain]; 
     self.editing = false; 
    } 
    else { 
     [super setEditing:YES animated:YES]; 
     [tableView setEditing:YES animated:YES]; 
     [tableView reloadData]; 
     [leftButton setTitle:@"Done"]; 
     [leftButton setStyle:UIBarButtonItemStyleDone]; 
     self.editing = true; 
    } 
} 

,它工作正常。但只有一段時間。只要我引入一個新的UIViewController,然後關閉那個控制器,這個刪除函數就不能在這個主屏幕上工作了。它工作正常,直到一個新的UIViewController放在上面。按鈕本身工作正常,並且self.editing的值確實在true和false之間正確切換,但小紅線不顯示。爲什麼會發生這種情況?

+0

你爲什麼要調用'[super setEditing:animated:]'然後'self.editing =/* ... * /;'。 Self的實現應該自動調用super。這可能不是問題。 – 2011-06-15 02:41:46

回答

0

我猜你的UINavigationBarItem上的目標仍然被設置爲第一個視圖控制器,而不是被推入堆棧的後續視圖控制器。

+0

你能解釋一點細節嗎?我該如何解決這個問題? – CodeGuy 2011-06-15 02:52:53

+0

當你創建你的UINavigationBarItem(以編程方式或IB)時,你要設置一個目標(你的第一個視圖控制器)和一個選擇器(在這種情況下爲editButtonSelected:)。如果不將該目標更改爲導航堆棧上的任何新視圖控制器,它仍將調用主視圖控制器上的editButtonSelected:方法。 – 2011-06-15 02:57:39

+0

但這就是我想要它做的。我想要主視圖控制器(它有UITableView)顯示紅色的小線條。 – CodeGuy 2011-06-15 03:04:42