如何取消表格单元格选择

Posted

技术标签:

【中文标题】如何取消表格单元格选择【英文标题】:How to cancel table cell selection 【发布时间】:2016-02-26 07:15:01 【问题描述】:

我的所有表格单元格都允许选择,但是否可以在(此功能)tableView(tableVIew: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 获悉单元格已被选中之前取消表格单元格操作触摸?

【问题讨论】:

您能进一步解释一下您将要做什么吗?单击单元格时执行操作? 一般来说,当单元格被点击时,它会检查用户是否点击了一个按钮。如果不是,则它会通知用户(通过弹出窗口)在选择单元格之前按下按钮。但我得到了以下答案的回答。谢谢。 【参考方案1】:

如果要取消选择,可以实现func tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath?对选择事件做出反应。

以下代码将取消对部分第一行的选择:

func tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath? 
    if (indexPath.row == 0) 
        return nil
    
    return indexPath


func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 
    print("SELECTED!!!")

如果您想避免单元格突出显示,您也可以查看func tableView(tableView: UITableView, shouldHighlightRowAtIndexPath indexPath: NSIndexPath) -> Bool 并实现此方法。

【讨论】:

谢谢,我会试试的【参考方案2】:

-(BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath 方法可以防止单元格高亮,但如果启用了单元格,则不能阻止选择。

你可以

    在应用执行期间动态设置单元格是否启用。 通过在shouldHighlightRowAtIndexPath 中返回false 来防止突出显示您不想选择的单元格,然后在任何执行发生之前立即在didSelectRowAtIndexPath 中中断。

【讨论】:

【参考方案3】:

不,您不能停止调用委托 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;

您可以使用以下委托来禁用选择

(void)selectRowAtIndexPath:(nullable NSIndexPath *)indexPath animated:(BOOL)animated scrollPosition:(UITableViewScrollPosition)scrollPosition;

(void)deselectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated;

(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath

或者您可以通过验证来控制行为 if( indexPath.section == 0 ) 返回零;

【讨论】:

以上是关于如何取消表格单元格选择的主要内容,如果未能解决你的问题,请参考以下文章

单击离开时取消选择表格单元格。迅速

表格视图中选择和取消选择单元格之间的差异

如何在单元格选择/取消选择时正确切换 UITableViewCell 的 accesoryType?

如何在 React 中取消单击表格单元格

重新加载表视图数据并取消选择单元格

允许触摸表格单元格以取消其他当前触摸