触摸时取消 UIButton 触摸
Posted
技术标签:
【中文标题】触摸时取消 UIButton 触摸【英文标题】:Cancel UIButton touch while touching it 【发布时间】:2013-02-08 15:57:46 【问题描述】:我有一种情况,用户会触摸 UIButton,虽然他们可能已经在触摸它,但我需要能够取消它或导致它失败。
我曾尝试使用 button.enabled 和 userInteractionEnabled,但两者都不能即时工作。两者都必须在触摸开始之前设置。
我可以让按钮在被触摸后和被触摸时失效吗?
【问题讨论】:
您是要取消后台进程还是取消按钮连接的直接出口? 【参考方案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
【讨论】:
这是我目前的解决方法,但似乎我应该能够以某种方式取消触摸。 您可以取消触摸。但是你必须以不同的方式处理它们。您必须实现UIResponder
的响应触摸事件。检查此 Apple 文档 developer.apple.com/library/ios/#documentation/uikit/reference/… 和本教程 mobile.tutsplus.com/tutorials/iphone/…
hitTest 这样的东西不会更简单吗?【参考方案3】:
这可以为任何UIButton
完成。如果您想在用户按下按钮时取消按钮按下,这些步骤应该有效:
为需要检查取消的事件设置处理程序。在这种情况下,当按钮按下时。
[yourButton addTarget: self
action: @selector(buttonIsDownHandler:)
forControlEvents: UIControlEventTouchDown];
在handler中,决定是否取消按下
-(IBAction) buttonIsDownHandler: (id) sender
if (needToCancelThisPress)
[yourButton cancelTrackingWithEvent: nil];
取消后将调用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)];
如果没有帮助或您正在寻找什么,请原谅。
【讨论】:
感谢您的努力,但我不确定这就是我所追求的。以上是关于触摸时取消 UIButton 触摸的主要内容,如果未能解决你的问题,请参考以下文章
touchesBegan 和 touchesEnded 未在 UIButton 上调用