9

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

我曾尝试使用 button.enabled 和 userInteractionEnabled,但两者都不能即时工作。两者都必须在触摸开始之前设置。

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

4

5 回答 5

9

您需要为您的按钮注册两个操作,一个用于触摸,一个用于触摸。在着陆时,您可以决定是否要取消;并在触摸中,编写按钮按下的实际逻辑。

[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];
}

有关参考,请参阅in的文档-cancelTrackingWithEvent:UIControl

于 2013-02-08T16:42:51.280 回答
2

您可以做的一件事是根据您的需要自定义按钮的按下外观。利用: – setBackgroundImage:@"NormalStateImage.png" forState: UIControlStateNormal – setBackgroundImage:@"HighlightedStateImage.png" forState: UIControlStateHighlighted

将属性设置adjustsImageWhenHighlighted为 NO 并将adjustsImageWhenDisabled属性设置为 NO

于 2013-02-08T16:25:38.720 回答
1

这可以对任何UIButton. 如果您想在用户按下按钮时取消按钮按下,这些步骤应该有效:

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

    [yourButton addTarget: self
                   action: @selector(buttonIsDownHandler:)
         forControlEvents: UIControlEventTouchDown];
    
  2. 在handler中,决定是否取消按下

    -(IBAction) buttonIsDownHandler: (id) sender
    {
       if (needToCancelThisPress)
       {
          [yourButton cancelTrackingWithEvent: nil];
       }
    }
    
  3. UIControlEventTouchCancel取消后将调用按钮的处理程序。

可以随时取消按钮触摸取消。例如,如果您想跟踪用户何时按住太久,您可以在UIControlEventTouchDown处理程序中启动一个计时器,然后在计时器到期时取消触摸。

于 2014-09-06T07:41:46.290 回答
0

只需使用 BOOL 变量来指示是否允许按钮操作,并在必要时进行检查。Enabled 和 userinteractionenabled 通常只是为了禁用触摸

于 2013-02-08T16:01:26.637 回答
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)]; 

如果它没有帮助或您正在寻找什么,请原谅。

于 2013-02-08T16:04:59.593 回答