UITutView内部的UIButton setHighlighted未在表滚动中更新

时间:2014-02-05 16:14:11

标签: ios uitableview uibutton uicontrol touches

我有一个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接管滚动触摸事件的控制时。

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

为什么我没有从setHighlighted:NO获取UIControl touchesCancelled:

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

1 个答案:

答案 0 :(得分:1)

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

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