我有一个情况,用户可能正在触摸UIButton,但我需要能够取消它或使其失败。
我尝试过使用button.enabled和userInteractionEnabled,但都不能实时生效。两者都必须在触摸开始前设置。
我能否在触摸后并且在触摸期间使按钮失败?
我有一个情况,用户可能正在触摸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。
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-touches/。 - luksfarris这可以适用于任何UIButton
。如果您想在用户开始点击按钮的时候取消按钮的按下操作,则应执行以下步骤:
设置处理程序以检查需要取消的事件。在这种情况下,当按钮按下时。
[yourButton addTarget: self
action: @selector(buttonIsDownHandler:)
forControlEvents: UIControlEventTouchDown];
在处理程序中,决定是否取消按下操作
-(IBAction) buttonIsDownHandler: (id) sender
{
if (needToCancelThisPress)
{
[yourButton cancelTrackingWithEvent: nil];
}
}
取消后,将调用按钮的 UIControlEventTouchCancel
处理程序。
UIControlEventTouchDown
处理程序中启动计时器,然后在计时器到期时取消触摸。我不确定你的问题,但是你可以根据控件事件执行不同的操作,例如下面这样
[button addTarget:self
action:@selector(onTouchUpInside:)
forControlEvents:(UIControlEventTouchUpInside)];
[button addTarget:self
action:@selector(onTouchDown:)
forControlEvents:(UIControlEventTouchDown)];
[button addTarget:self
action:@selector(onTouchUpOutside:)
forControlEvents:(UIControlEventTouchUpOutside)];
如果这不是您需要的或者对您没有帮助,请见谅。
只需有一个BOOL变量来指示按钮动作是否允许,并在必要时进行检查。Enabled和userinteractionenabled只是为了通常禁用触摸。