【问题标题】:Disable UITableViewCell selection by touch but enable by method call通过触摸禁用 UITableViewCell 选择但通过方法调用启用
【发布时间】:2014-10-08 05:13:48
【问题描述】:

防止用户选择 UITableView 中的单元格但允许我的程序在表格视图上调用 selectRowAtIndexPath: 的最佳方法是什么?

我还希望 UITableViewCell 中的控件保持交互性(即允许在 UITableViewCell 上调用 touchesBegan:)。

如果我调用[tableView setAllowsSelection:NO],调用selectRowAtIndexPath: 不会做任何事情。

【问题讨论】:

  • 为表格视图将 userInteraction 设置为 No,然后尝试调用 selectRowAtIndexPath。
  • 不幸的是,这不会将任何触摸传递给单元格。它不会在单元格上调用touchesBegan:
  • 哦。您能否简要介绍一下为什么要停止默认单元格选择并使用 touchesBegan 进行自定义选择?
  • 您可以在调用 didSelectRowAtIndexPath: 后立即调用 deselectRowAtIndexPath:,然后您可以显示自定义按钮。按下按钮时,您可以按预期调用 selectRowAtIndexPath:
  • @golddove - 不,不会。在此之后单元格将保持选中状态。

标签: ios objective-c uitableview touches


【解决方案1】:

我意识到,当您以编程方式调用selectRowAtIndexPath: 时,将不会调用委托方法willSelectRowAtIndexPath:。但是,如果用户点击一个单元格,则会调用它。此方法可以返回 nil 以防止选择。

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    return nil;
}

这将确保只有对selectRowAtIndexPath: 的编程调用会选择一行,而任何点击选择一行的操作都不会。

【讨论】:

  • 您还可以做一件事,1. 开始触摸时将 uitableview 对象的委托设置为 nil,2. 触摸结束时再次将委托设置为 self。
【解决方案2】:

取消选中复选框:在 TableView 和 TableViewCell 中启用用户交互

【讨论】:

  • UITableViewCell 中的控件不会保持交互,touchesBegan: 也不会被调用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-12
  • 2011-10-09
  • 2016-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多