我有一个UIButton的子类放在UITableViewCell的contentView中。我遇到的问题是当我按下按钮并快速滚动表格时,按钮的setHighlighted:
方法被调用三次,所有方法都以YES
为参数。当桌子滚动时,按钮永远不会被取消突出显示(所以当我完成滚动时,我的一个按钮看起来像是按下了,但屏幕上没有任何手指)。如果我按下按钮,等待一秒钟,然后滚动表格不会滚动,按钮会正确地解除突出显示(当触摸事件退出按钮的框架时)。
我尝试将tableView设置为
self.tableView.canCancelContentTouches = NO;
self.tableView.delaysContentTouches = NO;
但这没有帮助(设置delaysContentTouches = NO
实际上使表不可滚动)。我没有尝试在新的UITableViewCellScrollView中设置这些,因为这是私有的,我不想为if IOS7, else
添加新代码......
setHighlighted:
来自UIControl touchesBegan:
,UIControl touchesMoved
和UIControl touchesEnded:
。我从来没有从UIControl touchesCancelled:
得到任何东西,这是我期望当tableView接管滚动触摸事件的控制时。
如果有人认为我做错了什么,我可以添加代码,但这对我来说似乎更像是一个概念问题。
为什么我没有从setHighlighted:NO
获取UIControl touchesCancelled:
?
我还没有尝试过使用非子类化的UIButton和setImage:forState:
,因为我突出显示的状态只是渐变,我不想为它们创建UIImage。但如果必须,我可以。
答案 0 :(得分:1)
这可能不是处理此问题的正确方法,但由于没有其他人提供任何其他解决方案,我只是找到了解决我遇到的问题的方法。由于默认touchesCancelled
显然没有向我的按钮sublcass发送setHighlight:NO
消息,因此我在我的UIButton子类中重载touchesCancelled
函数并调用[self setHighlighted:NO]
。这似乎解决了当桌面滚动时按钮保持突出显示的问题。
以防万一其他人在将来遇到这个问题。