【问题标题】:Detecting UITouch outside of view在视图之外检测 UITouch
【发布时间】:2016-09-15 00:01:28
【问题描述】:

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

这很好用,但我想设置它,以便点击按钮以外的任何地方将其重新重置为第一个图像,因此需要再次点击 2 次。

有什么方法可以检测用户是否在UIButton之外进行触摸;也许有办法给它“焦点”并检查焦点退出?

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

【问题讨论】:

  • 如果第二次触摸是在某个其他控件(按钮、文本字段等)上,您希望触摸在该控件上具有其通常的效果,还是完全忽略?

标签: ios objective-c uibutton uitouch


【解决方案1】:

UITapGestureRecognizer 附加到按钮的超级视图(可能是视图控制器的内容视图)。将userInteractionEnabled 设置为true。将重置按钮的代码放入点击手势识别器的处理程序中。

【讨论】:

  • 奇怪,当我开始我的时候,我在这里没有看到任何答案。将其删除。
【解决方案2】:

如您所知,您可以在按下视图时使用UIControlEvent.touchUpInside

如果您想查看新闻何时不在视图中,您可以UIControlEvent.touchUpOutside 代替

button.addTarget(self, action:<SELECTOR>,forControlEvents: UIControlEvents.TouchUpOutside)

【讨论】:

    【解决方案3】:

    您可以添加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];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多