在视图外检测 UITouch
Detecting UITouch outside of view
我有一个 UIButton
作为 "confirm" 按钮。基本上,我希望它需要两次点击来触发它的动作,所以当你第一次点击它时,图片会变成 "are you sure" 类型的图像,此时,第二次点击会触发动作。
这很好用,但我想对其进行设置,以便点击按钮以外的任何地方都会将其再次重置回第一张图片,因此需要再次点击 2 次。
有什么方法可以检测用户是否触摸了 UIButton
之外的东西;也许有没有办法给它 "focus" 并检查焦点退出?
我想到了 UITouch
,但它只会将其事件发送到您正在触摸的响应它的视图。
如您所知,您可以在按下视图时使用 UIControlEvent.touchUpInside
如果您想查看某个媒体何时在视图之外,您可以 UIControlEvent.touchUpOutside
而不是
button.addTarget(self, action:<SELECTOR>,forControlEvents: UIControlEvents.TouchUpOutside)
您可以添加 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];
}
将 UITapGestureRecognizer
附加到按钮的超级视图(可能是视图控制器的内容视图)。将 userInteractionEnabled
设置为 true。将重置按钮的代码放入点击手势识别器的处理程序中。
我有一个 UIButton
作为 "confirm" 按钮。基本上,我希望它需要两次点击来触发它的动作,所以当你第一次点击它时,图片会变成 "are you sure" 类型的图像,此时,第二次点击会触发动作。
这很好用,但我想对其进行设置,以便点击按钮以外的任何地方都会将其再次重置回第一张图片,因此需要再次点击 2 次。
有什么方法可以检测用户是否触摸了 UIButton
之外的东西;也许有没有办法给它 "focus" 并检查焦点退出?
我想到了 UITouch
,但它只会将其事件发送到您正在触摸的响应它的视图。
如您所知,您可以在按下视图时使用 UIControlEvent.touchUpInside
如果您想查看某个媒体何时在视图之外,您可以 UIControlEvent.touchUpOutside
而不是
button.addTarget(self, action:<SELECTOR>,forControlEvents: UIControlEvents.TouchUpOutside)
您可以添加 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];
}
将 UITapGestureRecognizer
附加到按钮的超级视图(可能是视图控制器的内容视图)。将 userInteractionEnabled
设置为 true。将重置按钮的代码放入点击手势识别器的处理程序中。