如果用户在屏幕上的任何其他位置进行交互,我希望此控件返回其初始状态.是否有非侵入性的方法来实现这一目标?
澄清:如果我不能在此控件中包含代码,我认为代码是入侵的.我想给这个代码的另一个应用程序开发,他们可以用来将控件添加到他们的应用程序,而不必在应用程序中的任何其他地方乱码.如果这是不可能的,那很好,但问题是如何非侵入性地实现这一点.
解决方法 您可以将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外的任何地方进行交互?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)