【问题标题】:UIButton inside UITableViewCell setHighlighted not updated on table scrollUITableViewCell setHighlighted中的UIButton在表格滚动时未更新
【发布时间】:2023-03-08 21:05:01
【问题描述】:

我有一个 UIButton 的子类放置在 UITableViewCell 的 contentView 中。我遇到的问题是,当我按下按钮并(快速)滚动表格时,按钮的setHighlighted: 方法被调用了三次,所有这些都以YES 作为参数。当表格滚动时,该按钮永远不会被取消突出显示(所以当我完成滚动时,我的一个按钮看起来像是被按下了,但屏幕上不再有任何手指)。如果我按下按钮,请稍等片刻,然后滚动表格不会滚动并且按钮会正确取消突出显示(当触摸事件退出按钮的框架时)。

我已尝试将 tableView 设置为

self.tableView.canCancelContentTouches = NO;
self.tableView.delaysContentTouches = NO;

但这无济于事(设置delaysContentTouches = NO 实际上使表格不可滚动)。我没有尝试在新的 UITableViewCellScrollView 中设置这些,因为这是私有的,我不想为 if IOS7, else 添加新代码...

setHighlighted: 调用来自UIControl touchesBegan:UIControl touchesMovedUIControl touchesEnded:。我从来没有从UIControl touchesCancelled: 得到任何东西,当 tableView 接管触摸事件的控制以进行滚动时,这是我所期望的。

如果有人认为我做错了什么,我可以添加代码,但这对我来说更像是一个概念问题。

为什么我没有从UIControl touchesCancelled: 收到setHighlighted:NO

我还没有尝试使用非子类 UIButton 和 setImage:forState:,因为我突出显示的状态只是渐变变化,我不想为它们创建 UIImage。但如果必须,我可以。

【问题讨论】:

    标签: ios uitableview uibutton uicontrol touches


    【解决方案1】:

    这可能不是处理此问题的正确方法,但由于没有其他人提供任何其他解决方案,我只是找到了解决我遇到的问题的方法。由于默认的touchesCancelled 显然不会向我的按钮子类发送setHighlight:NO 消息,因此我在我的UIButton 子类中重载了touchesCancelled 函数并调用[self setHighlighted:NO]。这似乎解决了表格滚动时按钮保持突出显示的问题。

    以防万一其他人将来遇到这个问题。

    【讨论】:

      猜你喜欢
      • 2013-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多