2011-06-15 158 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