在视图外检测UITouch

时间:2016-09-15 00:01:29

标签: ios objective-c uibutton uitouch

我有UIButton作为“确认”按钮。基本上,我希望它需要两次点击来触发它的动作,所以第一次点击它时,图片将变为“你确定”类型的图像,此时,第二次点击会触发动作。

这样可以正常工作,但是我想设置它以便点击按钮外的任何地方再次将其重置为第一张图像,因此需要再次点按两次。

有没有办法检测用户是否在UIButton之外触摸;也许有办法让它“专注”并检查焦点退出?

我想到了UITouch,但这只会将其事件发送到您正在触摸的视图,以响应它。

3 个答案:

答案 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];
}