繁体   English   中英

触摸时取消UIButton触摸

[英]Cancel UIButton touch while touching it

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

我曾尝试使用button.enabled和userInteractionEnabled,但两者都没有动态。 两者都必须在触摸开始之前设置。

我可以在触摸后触摸时使按钮失效吗?

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

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

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

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

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

这可以针对任何UIButton完成。 如果要在用户触摸时取消按钮,则这些步骤应该有效:

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

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

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

按键触摸取消可以随时进行。 例如,如果要跟踪用户何时按住并保持太长时间,可以在UIControlEventTouchDown处理程序中启动计时器,然后在计时器到期时取消触摸。

只需要BOOL变量指向是否允许按钮操作,并在必要时进行检查。 启用和userinteractionenabled只是为了禁用一般的触摸

不确定您的问题,但您可以根据下面的控制事件进行不同的操作

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM