gpt4 book ai didi

ios - 如何以非侵入方式检测 UIControl 之外任何地方的交互?

转载 作者:可可西里 更新时间:2023-11-01 06:10:24 24 4
gpt4 key购买 nike

我有一个自定义的 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;

为了防止出现警告,您还应该声明您的 Controller 符合 UIGestureRecognizerDelegate 协议(protocol)。

关于ios - 如何以非侵入方式检测 UIControl 之外任何地方的交互?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17348077/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com