【问题标题】:Properly setting up willSelectRowAtIndexPath and didSelectRowAtIndexPath to send cell selections正确设置 willSelectRowAtIndexPath 和 didSelectRowAtIndexPath 以发送单元格选择
【发布时间】:2011-02-16 01:09:25
【问题描述】:

感觉我在这里有点疯了。我有几个独立的UITextFields、UITAbleViewCells 中的几个UITextFields 和一个单独的UITableViewCell 的详细视图,如果有的话,它们将用于保存笔记。我只希望在编辑模式下可以选择此单元格。当我不处于编辑模式时,我不希望能够选择它。选择单元格(在编辑模式下)将触发一个方法,该方法将启动一个新视图。我知道这很容易,但我在某处遗漏了一些东西。

以下是我目前使用的选择方法:

-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (!self.editing) {
        NSLog(@"Returning nil, not in edit mode");
        return nil;
    }
    NSLog(@"Cell will be selected, not in edit mode");
    if (indexPath.section == 0) {
        NSLog(@"Comments cell will be selected");
        return indexPath;
    }
    return nil;
}

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (!self.editing) {
        NSLog(@"Not in edit mode. Should not have made it this far.");
        return;
    }

    if (indexPath.section == 0)
        [self pushCommentsView];
    else
        return;
}

我的问题真的是2倍;

1) 即使我没有处于编辑模式,并且我知道我正在返回 nil(由于 NSLog 消息),我仍然可以选择该行(它闪烁蓝色)。根据我对willSelectRowAtIndexPath 方法的理解,这不应该发生。也许我错了?

2) 当我进入编辑模式时,我根本无法选择任何东西。 willSelectRowAtIndexPath 方法永远不会触发,didSelectRowAtIndexPath 也不会。我在setEditing 方法中唯一要做的就是在编辑时隐藏后退按钮,并将firstResponder 分配给顶部的textField 以使键盘弹出。我想也许第一响应者妨碍了点击(这会很愚蠢),但即使注释掉了,我也无法在编辑期间执行单元格选择。

【问题讨论】:

    标签: iphone uitableview didselectrowatindexpath


    【解决方案1】:

    天哪,我是个白痴。我从未添加过这些行:

    self.tableView.allowsSelection = NO; // Keeps cells from being selectable while not editing. No more blue flash.
    self.tableView.allowsSelectionDuringEditing = YES; // Allows cells to be selectable during edit mode.
    

    抱歉这个垃圾问题。

    【讨论】:

    • 在 Xcode 4.2/iOS5 中,这些可以在 Interface Builder 的 TableView 上设置。
    • 通过在 Storyboard/Interface Builder 的“选择”选项中选择 Single Selection 解决了这个问题。谢谢!
    【解决方案2】:

    文档指出tableView:willSelectRowAtIndexPath: 在编辑模式下不会被调用。此外,即使您取消选择,也会出现蓝色闪烁。来自文档:

    直到用户触摸一行然后抬起手指时才会调用此方法;直到那时该行才被选中,尽管它在触地时突出显示。您可以使用 UITableViewCellSelectionStyleNone 来禁用触摸时单元格突出显示的外观。当表格的编辑属性设置为YES(即表格视图处于编辑模式)时,不会调用该方法。

    【讨论】:

    • 感谢您的回答。让我仔细检查文档,这让我意识到我的愚蠢错误。
    • 只想通过完整引用文档来澄清这个答案:“......当表格视图处于编辑模式时(即表格视图的编辑属性)不会调用此方法设置为YES)除非表格视图允许在编辑期间进行选择(即表格视图的allowSelectionDuringEditing属性设置为YES)。"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-06
    • 2018-12-27
    • 2013-04-05
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 2021-10-14
    相关资源
    最近更新 更多