【问题标题】:Cancel UIButton touch while touching it触摸时取消 UIButton 触摸
【发布时间】:2013-02-08 15:57:46
【问题描述】:

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

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

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

【问题讨论】:

  • 您是要取消后台进程还是取消按钮连接的直接出口?

标签: ios cocoa-touch uibutton


【解决方案1】:

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

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

有关参考,请参阅the documentation of -cancelTrackingWithEvent: in UIControl

【讨论】:

    【解决方案2】:

    解决问题的方法之一是根据您的需要自定义按钮的按下外观。采用: – setBackgroundImage:@"NormalStateImage.png" forState: UIControlStateNormal – setBackgroundImage:@"HighlightedStateImage.png" forState: UIControlStateHighlighted

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

    【讨论】:

    【解决方案3】:

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

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

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

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 但是在按钮已经被按下后如何取消触摸?使用布尔值,我可以阻止触摸做任何事情,但它仍然会显示它正在被触摸。
      【解决方案5】:

      不确定您的问题,但您可以根据控制事件采取不同的操作,如下所示

      [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-03-26
      • 1970-01-01
      • 1970-01-01
      • 2011-04-09
      • 1970-01-01
      • 2017-02-12
      • 1970-01-01
      • 2016-12-14
      • 1970-01-01
      相关资源
      最近更新 更多