我遇到的情况是用户会触摸UIButton,而他们可能已经触摸过它,我需要能够取消它或导致它失败。
我曾尝试使用button.enabled和userInteractionEnabled,但两者都无法动态运行。两者都必须在触摸开始之前设置。
我可以在触摸后触摸时使按钮失效吗?
答案 0 :(得分:8)
您需要为按钮注册两个操作,一个用于触摸,一个用于修饰。触摸下来,您可以决定是否要取消;并在触摸时,写下按钮按下的实际逻辑。
[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
。
答案 1 :(得分:2)
您可以做的一件事就是根据需要自定义按钮的按下外观。使用:
– setBackgroundImage:@"NormalStateImage.png" forState: UIControlStateNormal
– setBackgroundImage:@"HighlightedStateImage.png" forState: UIControlStateHighlighted
将属性adjustsImageWhenHighlighted
设置为NO
和adjustsImageWhenDisabled
属性为NO
答案 2 :(得分:1)
可以对任何UIButton
执行此操作。如果您想在用户触摸时取消按钮,则这些步骤应该有效:
为需要检查取消的事件设置处理程序。在这种情况下,当按钮关闭时。
[yourButton addTarget: self
action: @selector(buttonIsDownHandler:)
forControlEvents: UIControlEventTouchDown];
在处理程序中,决定是否取消按
-(IBAction) buttonIsDownHandler: (id) sender
{
if (needToCancelThisPress)
{
[yourButton cancelTrackingWithEvent: nil];
}
}
取消后会调用按钮的UIControlEventTouchCancel
处理程序。
按键触摸取消可以随时进行。例如,如果要跟踪用户何时按住并保持太长时间,可以在UIControlEventTouchDown
处理程序中启动计时器,然后在计时器到期时取消触摸。
答案 3 :(得分:0)
只有BOOL变量指向是否允许按钮操作,并在必要时进行检查。 Enabled和userinteractionenabled只是禁用一般的触摸
答案 4 :(得分: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)];
如果没有帮助或者您正在寻找什么,请原谅。