禁用 UITableView 浮动部分标题点击?

Posted

技术标签:

【中文标题】禁用 UITableView 浮动部分标题点击?【英文标题】:Disable UITableView floating section header tap-through? 【发布时间】:2013-04-05 17:44:09 【问题描述】:

我有一个带有自定义部分标题视图的普通样式 UITableView(6.0 之前,所以不是 UITableViewHeaderFooterView)。有些可以点击,有些则不能。当它们浮动在其他单元格上方的表格视图顶部时,点击会穿过标题部分到下面的表格视图单元格。由于应用程序其他地方对该视图的重用要求,节标题视图是 UITableViewCell 的子类。有没有办法防止触摸通过?

如果我将部分标题视图的子类更改为 UIView 而不是 UITableViewCell,问题就会消失。但是,由于其他原因,此解决方案不可行。 UITableViewCell 中是否有一些我可以禁用的特殊行为?

【问题讨论】:

【参考方案1】:

看看- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event实例方法here。

您可以在您的 UIView 子类中重写此方法并返回您想要响应触摸的视图。

可能使用这种方法:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event

    id hitView = [super hitTest:point withEvent:event];

    if (hitView == self) 
        return nil;
     else 
        return hitView;
    

希望这会有所帮助。

【讨论】:

不幸的是,这似乎不起作用。我已经更新了原始问题以包含这一点,因为在应用程序的其他地方重用此视图的要求,节标题是 UITableViewCell 的子类。 UITableViewCell 是 UIView 的子类,因此您应该仍然能够捕捉到触摸。 不幸的是,覆盖 hitTest:withEvent: 方法不起作用。当点在剖面视图中时返回 nil 或 self 仍然会导致下面的单元格也显示为选中状态。不过,该部分也会收到触摸,因为在点击它时会触发附加的操作。【参考方案2】:

只要启用用户交互 false 如果您有权访问部分标题视图

【讨论】:

【参考方案3】:

我也有同样的情况。 我最终在我的自定义标题单元格中的其他内容下方放置了一个 UIButton,并使其成为整个单元格的大小并使其融入其中。

现在它捕捉到了点击,什么也不做,防止点击进入它下面的单元格。希望这会有所帮助。

【讨论】:

以上是关于禁用 UITableView 浮动部分标题点击?的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 部分标题在“浮动”时可以更改吗?

UITableView 普通禁用粘滞标题 [重复]

如何在 UITableView 上浮动所有部分标题视图(或保持所有可见)?

如何禁用 UITableView 的部分索引的用户交互?

tvOS 9.1 UITableView 标题视图不浮动

禁用 UITableview 滚动时出现问题