Swift:禁用对 UITableViewCell 的触摸

Posted

技术标签:

【中文标题】Swift:禁用对 UITableViewCell 的触摸【英文标题】:Swift: Disable touches on a UITableViewCell 【发布时间】:2017-04-10 20:47:13 【问题描述】:

我在 MKMapView 之上有一个 UITableView。我希望拥有与 Apple 地图应用程序类似的功能。您可以在其中上下移动桌子,但仍然可以移动它后面的地图。现在我在索引 0 处有一个空白单元格,它是清晰的,我希望能够禁用该单元格接收的所有触摸并允许其后面的地图移动,但是当索引 1 中的单元格被触摸时,该单元格可以向上滚动表格的其余部分现在位于地图顶部。

如果有更好的方法来解决这个问题,我愿意尝试你的解决方案!

【问题讨论】:

您可以从界面构建器中禁用对单元格的触摸,您将在其中找到名为“选择”的表格视图属性并将其设置为“无选择”值。 @Hosny 这只会使单元格不可选,但仍允许不可选择的单元格移动单元格所在的表格。我需要单元格和表格在触摸移动时不移动但允许要移动的单元格和表格后面的地图。 【参考方案1】:
func tableView(_ tableView: UITableView, didSelectRowAt
 indexPath: IndexPath)

    //UITableViewCell *cell = something

    if indexPath.row == 0 
         cell.selectionStyle = .none
         cell.isUserInteractionEnabled = false
    


 

此代码的作用是确保在用户点击单元格时不会突出显示该单元格。然后if 中的第二行是确保tableView:didSelectRowAtIndexPath: 没有被调用,如果该行被遗漏,即使 selectionStyle 为无!

【讨论】:

这样就停止了单元格上的交互,但触摸不会通过单元格到达地图。触摸仍然与单元格所在的表格交互。 @Averex 所以我有点好奇,因为如果您将表格视图放在地图上方,并且第一个单元格没有响应用户的触摸,它应该如何影响 MapView?当我查看 Apple Maps 时,第一行(索引 0)也在拉起表格,但根本没有移动地图。所以我不确定“触摸不通过单元格到达地图”是什么意思,因为据我所知,如果地图顶部有任何元素,并且你触摸它,地图不会响应触手可及。 要回答您的第一个问题,我希望空白单元格成为缓冲区,以便索引 1 处的单元格可以从屏幕底部附近开始。我不希望用户使用空白单元格来移动表格我只是希望它作为索引 1 单元格的缓冲区,然后对空白单元格的任何触摸都不会对表格起作用,而是覆盖表格以允许地图在它后面使用。有没有其他方法可以使缓冲区没有空白单元格? @Averex 我不确定这是否可能,但是我相信您可以采取一些非常老套的方式将它们组合在一起,但不确定是否会推荐。我想说,如果您不想阻碍地图,也许可以尝试使用更好的约束来按照您想要的方式放置表格!

以上是关于Swift:禁用对 UITableViewCell 的触摸的主要内容,如果未能解决你的问题,请参考以下文章

Swift 春季动画在 UITableViewCell 上无法正常工作

在 Swift 3 中单击和双击 UITableViewCell

无法在 UITableViewCell 中禁用 UIButton

我希望禁用两个 uitextfield,因此无法对其进行编辑-SWIFT

在 UIButton/UITableViewCell/UICollectionViewCell 选择上禁用 VoiceOver

swift禁用webView对H5中数字,链接,日期,地址,电话号码做解析