UIButton阻止ControlState的操作

时间:2012-08-02 13:42:40

标签: objective-c events

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

如果UIControlEventTouchUpInside触发的操作检测到需要此操作,是否可以“阻止”绑定到UIControlEventTouchDown的操作?

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

2 个答案:

答案 0 :(得分:1)

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

  

由UIControlEventTouchDown触发的操作检测到这是必需的

使用此通知设置变量。

答案 1 :(得分: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?)作为目标,因为我不确定自己是否是Touch up inside动作的接收者,但你应该明白这个想法