ios – 如何在非侵入式地检测UIControl外的任何地方进行交互?

ios – 如何在非侵入式地检测UIControl外的任何地方进行交互?,第1张

概述我有一个自定义UIControl,当点击时,进入确认状态,再次点击时,执行所需的 *** 作. 如果用户在屏幕上的任何其他位置进行交互,我希望此控件返回其初始状态.是否有非侵入性的方法来实现这一目标? 澄清:如果我不能在此控件中包含代码,我认为代码是入侵的.我想给这个代码的另一个应用程序开发,他们可以用来将控件添加到他们的应用程序,而不必在应用程序中的任何其他地方乱码.如果这是不可能的,那很好,但问题是如 我有一个自定义UIControl,当点击时,进入确认状态,再次点击时,执行所需的 *** 作.

如果用户在屏幕上的任何其他位置进行交互,我希望此控件返回其初始状态.是否有非侵入性的方法来实现这一目标?

澄清:如果我不能在此控件中包含代码,我认为代码是入侵的.我想给这个代码的另一个应用程序开发,他们可以用来将控件添加到他们的应用程序,而不必在应用程序中的任何其他地方乱码.如果这是不可能的,那很好,但问题是如何非侵入性地实现这一点.

解决方法 您可以将UITapGestureRecognizer放在触发解除的所有内容之上,只有当触摸发生在UIControl边界之外时才会触发.

就像是

- (voID)presentConfirm {   // whatever     self.dismissRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismiss:)];    self.dismissRecognizer = self;    [self.vIEw addGestureRecognizer:self.dismissRecognizer];}- (voID)dismiss:(UIGestureRecognizer *)gestureRecognizer {    // do stuff    [self.vIEw removeGestureRecognizer:self.dismissRecognizer];}- (BOol)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceivetouch:(UItouch *)touch {    CGPoint touchPoint = [touch locationInVIEw:self.vIEw];    return !CGRectContainsPoint(self.control.frame,touch));}

基本上,只有当触摸发生在UIControl帧之外时,才会触发dismiss方法(我假设您的控件被引用为self.control).

此外,您还需要声明为的dismissRecognizer属性

@property (nonatomic,strong) UITapGestureRecognizer *dismissRecognizer;

并且为了防止警告,您还应该声明您的控制器符合UIGestureRecognizerDelegate协议.

总结

以上是内存溢出为你收集整理的ios – 如何在非侵入式地检测UIControl外的任何地方进行交互?全部内容,希望文章能够帮你解决ios – 如何在非侵入式地检测UIControl外的任何地方进行交互?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1020941.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存