如何在UIButton中触发目标?

时间:2014-03-03 20:40:39

标签: ios objective-c uibutton uitouch

我在视图中有一个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应该将为目标操作添加的选择器调用到该按钮。

1 个答案:

答案 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