如何取消 table 单元格选择

How to cancel table cell selection

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

有方法-(BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath可以防止突出显示单元格,但如果启用了单元格,则无法阻止selection。

你可以

  1. 在您的应用程序执行期间动态设置要启用或不启用的单元格。
  2. 通过在 shouldHighlightRowAtIndexPath 中返回 false 来防止突出显示您不想 select 的单元格,然后在 didSelectRowAtIndexPath 中立即中断,然后再执行任何操作。

如果你想取消选择,你可以实现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 并实现此方法。

不,您不能停止调用委托
- (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

或者您可以放置​​验证来控制行为
如果(indexPath.section==0)return无;