我有UIButton
作为“确认”按钮。基本上,我希望它需要两次点击来触发它的动作,所以第一次点击它时,图片将变为“你确定”类型的图像,此时,第二次点击会触发动作。
这样可以正常工作,但是我想设置它以便点击按钮外的任何地方再次将其重置为第一张图像,因此需要再次点按两次。
有没有办法检测用户是否在UIButton
之外触摸;也许有办法让它“专注”并检查焦点退出?
我想到了UITouch
,但这只会将其事件发送到您正在触摸的视图,以响应它。
答案 0 :(得分:2)
将UITapGestureRecognizer
附加到按钮的超级视图(可能是视图控制器的内容视图)。将userInteractionEnabled
设置为true。将用于重置按钮的代码放在轻敲手势识别器的处理程序中。
答案 1 :(得分:0)
如您所知,您可以在按下视图时使用UIControlEvent.touchUpInside
如果您想查看印刷机何时在视图之外,您可以UIControlEvent.touchUpOutside
代替
button.addTarget(self, action:<SELECTOR>,forControlEvents: UIControlEvents.TouchUpOutside)
答案 2 :(得分:0)
您可以添加UITapGestureRecognizer
以触发用户触摸按钮事件
@interface YourViewController ()
@property NSInteger tapCount;
@property (weak) UITapGestureRecognizer *gestureRecognizer;
@end
添加UITapGestureRecognizer
- (IBAction)buttonPressed:(id)sender {
self.tapCount ++;
if (self.tapCount == 1) {
// change button label, image here
// add gesture gesture recognizer
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapOutSideAction)];
[tap setNumberOfTapsRequired:1];
[[[UIApplication sharedApplication] keyWindow] addGestureRecognizer:tap];
self.gestureRecognizer = tap;
} else if (self.tapCount == 2) {
// tap two times
self.tapCount = 0;
}
}
- (void)tapOutSideAction {
// reset button label, image here
// remove gesture recognizer
self.tapCount = 0;
[[[UIApplication sharedApplication] keyWindow] removeGestureRecognizer:self.gestureRecognizer];
}