我在视图中有一个UIButton,在那个按钮上我有一个UILabel
(TTTAttributedLabel)。 (https://github.com/mattt/TTTAttributedLabel)(虽然这不是与TTTAttributedLabel自定义类相关的直接问题)
这个UILabel用触摸执行一些操作,如果不喜欢触摸坐标,它会用相应的方法将它们转发到super:
[super touchesBegan:touches withEvent:event];
[super touchesMoved:touches withEvent:event];
[super touchesEnded:touches withEvent:event];
[super touchesCancelled:touches withEvent:event];
我看到在这种情况下正在按下下面的按钮。我也看到UIButton
中的所有方法都被完美地调用了。我还记录UITouch
个对象以查看它们是否匹配。
问题是,设置为UIButton
的操作未被调用(即使对于UIControlEventTouchDown
)。什么触发了这些行动?我认为匹配touchesBegan和touchesEnded应该将为目标操作添加的选择器调用到该按钮。
答案 0 :(得分:0)
触摸触发控制事件,我会说你的按钮不会因为按钮上有标签而接收到触摸。
有两种方法可以解决这个问题。首先,可能首选的方法是使用atributedTitle
的{{1}}属性,而不是在没有必要的情况下捣碎附加标签:
https://developer.apple.com/library/ios/documentation/uikit/reference/UIButton_Class/UIButton/UIButton.html#//apple_ref/occ/instm/UIButton/attributedTitleForState:
另一种方法是深入研究UIButton
,可能是它的子类,然后以更精细的比例处理触摸事件,尽管这比上面的解决方案复杂得多:
https://developer.apple.com/library/ios/documentation/uikit/reference/uicontrol_class/reference/reference.html