编辑时,`UITableView`不会调用didSelectRowAtIndexPath ??

时间:2010-06-15 17:34:20

标签: iphone uitableview

我有一个UITableViewController,用户应该能够编辑这些项目。为了启用编辑,我使用:

self.navigationItem.rightBarButtonItem = self.editButtonItem;

对于每个不知道self.editButtonItem来自哪里的人,它都是由SDK预定义的。

所以,现在当我按下任何一个项目时,这个方法被称为:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

但是当我点击编辑按钮并且编辑处于活动状态时,似乎没有调用此方法。

知道我错过了什么吗?

这是与编辑有关的其余代码:

// Override to support conditional editing of the table view.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath 
{
    // Return NO if you do not want the specified item to be editable.
    return YES;
}

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    return UITableViewCellEditingStyleNone;
}


- (BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath 
{
    return NO;
}

感谢您的帮助。

MCB

5 个答案:

答案 0 :(得分:122)

您必须将UITableView的allowsSelectionDuringEditing属性设置为true。

参考:UITableView - allowsSelectionDuringEditing

答案 1 :(得分:0)

点按编辑按钮时是否设置了self.editing = YES

在编辑模式下,当您点击一行时,将调用此方法,而不是didSelectRow:

tableView:commitEditingStyle:forRowAtIndexPath:.

答案 2 :(得分:0)

我以其他方式解决了这个问题。我的编辑按钮在我自己的导航栏上,这就是它没有被调用的原因。在导航控制器中嵌入VC后,在其导航项中放入新的编辑按钮后,编辑按钮开始被调用。

答案 3 :(得分:0)

简答(Swift lang):

@IBOutlet private weak var tableView: UITableView!

override func viewDidLoad() {
    super.viewDidLoad()

    tableView.allowsSelectionDuringEditing = true // Magic happens here
}

答案 4 :(得分:-2)

  

但是当我点击编辑按钮并且编辑处于活动状态时,似乎没有调用此方法。

     

知道我错过了什么吗?

是。当点击导航栏中的按钮时,您希望调用tableView:didSelectRowAtIndexPath:。这绝不会发生。仅在选择行时才会调用该方法。

点击编辑按钮时,您需要将表格置于编辑模式。在视图控制器中:

- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{
    [super setEditing:editing animated:animated]; // must be called first according to Apple docs

    [self.tableView setEditing:editing animated:animated];
}

然后,您通过添加tableView:commitEditingStyle:forRowAtIndexPath:方法处理编辑事件。