1

我有一个 UIButton,它对两个不同的控制事件有两个操作:UIControlEventTouchDownUIControlEventTouchUpInside.

UIControlEventTouchUpInside如果由 触发的动作检测到需要这样做,是否可以“阻止”绑定到 的动作UIControlEventTouchDown

我无法更改属于UIControlEventTouchUpInside-action 的代码,因为它是私有框架的一部分,所以我必须找到另一种方法来帮助我自己……</p>

4

2 回答 2

1

使UIControlEventTouchUpInside事件依赖于布尔变量(在 if 语句中)。但是,您会收到通知

UIControlEventTouchDown 触发的动作检测到这是需要的

使用此通知设置变量。

于 2012-08-02T13:51:50.177 回答
1

在您UIControlEventTouchDown希望UIControlEvenTouchUpInside不触发的事件的操作中,您可以在按钮上为该事件设置不同的(可能为空)操作,或者只是删除该操作。保持选择器引用或只知道它通常应该触发的其他操作的方法名称,如果您希望它触发,请重置它:

if ( buttonUsedDownAction )
{
    [button removeTarget:(self?) action:@selector(yourPrivateFunction) forControlEvents:UIControlEventTouchUpInside];
}
else
{
    if ( [button actionsForTarget:(self?) forControlEvent:UIControlEventTouchUpInside].length == 0 )
    {
        [button addTarget:(self?) action:@selector(yourPrivateFunction) forControlEvents:UIControlEventTouchUpInside];
    }
}

我设置(self?)了目标,因为我不确定 self 是否是 Touch up inside 动作的接收者,但你应该明白

于 2012-08-02T14:26:32.240 回答