2013-02-08 113 views
6

我有一种情况,用户将触摸一个UIButton,虽然他们可能已经触摸它,但我需要能够取消它或导致它失败。取消触摸它时的UIButton触摸

我试图使用button.enabled和userInteractionEnabled,但都没有在飞行中工作。两者都必须在触摸开始之前设置。

我可以让按钮在被触摸后和失败时失败吗?

+0

你想取消后台进程或连接到按钮的直接插座? – Bartu 2013-02-08 16:34:32

回答

0

只要有BOOL变量,指出哪个按钮动作是允许或不允许的,并检查必要的地方。启用,userinteractionenabled只是在一般

+0

但是如何在按钮被按下后取消触摸?用布尔我可以保持接触不做任何事情,但它仍然会显示它正在被触摸。 – daveMac 2013-02-08 16:18:37

0

不知道禁用你的问题倒是,但你可以基于像下面

[button addTarget:self 
        action:@selector(onTouchUpInside:) 
      forControlEvents:(UIControlEventTouchUpInside)]; 

[button addTarget:self 
        action:@selector(onTouchDown:) 
      forControlEvents:(UIControlEventTouchDown)]; 

[button addTarget:self 
        action:@selector(onTouchUpOutside:) 
      forControlEvents:(UIControlEventTouchUpOutside)]; 

请原谅我,如果这是没有帮助的,或者你是什么控制事件有歧行动寻找。

+0

我很欣赏这种努力,但我不确定那就是我所追求的。 – daveMac 2013-02-08 16:24:54

2

你可以做的一件事来解决你的问题是自定义按钮的按下的外观,以满足您的需求。用途: – setBackgroundImage:@"NormalStateImage.png" forState: UIControlStateNormal – setBackgroundImage:@"HighlightedStateImage.png" forState: UIControlStateHighlighted

设置属性adjustsImageWhenHighlighted为NO 和adjustsImageWhenDisabled属性为NO

+0

这是我目前的解决方法,但似乎我应该能够以某种方式取消该触摸。 – daveMac 2013-02-08 16:26:20

+0

您可以取消触摸。但你必须以不同的方式处理它们。你必须实现'UIResponder'响应触摸事件。检查此苹果文档http://developer.apple.com/library/ios/#documentation/uikit/reference/UIResponder_Class/Reference/Reference.html和本教程http://mobile.tutsplus.com/tutorials/iphone/ios -quick-tip-detecting-touch/ – Luke 2013-02-08 16:55:53

+0

不会像hitTest一样简单吗? – daveMac 2013-02-08 17:13:43

6

您需要注册两个动作为您的按钮,一个用于触碰和一个触摸起来。在接下来,您可以决定是否要取消并触摸起来,写下按钮按下的实际逻辑。

[button addTarget:self action:@selector(touchDown:) forControlEvents:UIControlEventTouchDown]; 

- (IBAction)touchDown:(id)sender 
{ 
    UIButton *b = (UIButton*)sender; 

    // Call this if you wish to cancel the event tracking 
    [b cancelTrackingWithEvent:nil]; 
} 
1

这可以用于任何UIButton。如果你想取消在用户触摸下就可以了时间按下按钮,这些步骤应该工作:

  1. 设置的处理程序,其中取消需要检查的事件。在这种情况下,当按钮关闭时。

    [yourButton addTarget:self action:@selector(buttonIsDownHandler :) forControlEvents:UIControlEventTouchDown];

  2. 在处理程序中,决定是否取消压榨

    - (IBAction为)buttonIsDownHandler:(ID)发送方 { 如果(needToCancelThisPress) { [yourButton cancelTrackingWithEvent:无]; } }

  3. 按钮的处理程序UIControlEventTouchCancel将在取消后调用。

按钮触摸取消可以随时完成。例如,如果您想追踪用户何时按下并保持太久,您可以在处理程序中启动计时器,然后在计时器到期时取消触摸。