有没有办法检测当前可见的UIView是哪个?
在iOS开发中,有时候我们需要知道当前显示在屏幕上的UIView是哪一个。然而,iOS并没有提供直接获取当前可见UIView的API。那么,问题来了,有没有办法检测当前可见的UIView呢?
有人提供了一种解决方法,但是使用这种方法会导致应用在提交到App Store时被拒绝,因为它使用了一个非公开的API。所以,这种方法并不可行。
为了解决这个问题,我找到了一种更好的解决方法,那就是创建一个UIView的Category。下面是我用来替换原始解决方案中的代码:
UIView (FindFirstResponder)
- (UIView *)findFirstResponder;
@end
@implementation UIView (FindFirstResponder)
- (UIView *)findFirstResponder
{
if (self.isFirstResponder) {
return self;
}
for (UIView *subView in self.subviews) {
UIView *firstResponder = [subView findFirstResponder];
if (firstResponder != nil) {
return firstResponder;
}
}
return nil;
}
@end
通过这种方法,我们可以在任何UIView对象上调用`findFirstResponder`方法来获取当前可见的UIView。这个方法会递归地遍历UIView的子视图,查找第一个作为第一响应者的UIView并返回。如果没有找到第一响应者,方法将返回nil。
当然,需要注意的是,使用这种方法也有可能会出现一些问题,比如在某些情况下可能无法正确获取到第一响应者。但总体来说,这种方法是一种可行的解决方案。
希望这篇文章对你有所帮助!
问题出现的原因:
用户想要找到当前可见的UIView,以便在调用UIActionSheet时使用。
解决方法:
1. 首先获取key window:
UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];
2. 然后通过执行performSelector方法获取第一响应者(first responder):
UIView *firstResponder = [keyWindow performSelector:(firstResponder)];
3. 最后,可以将获取到的view用于调用UIActionSheet。
需要注意的是,如果使用上述代码提交应用,可能会因为使用了非公开的API而被拒绝。