有没有办法检测当前可见的UIView是哪个?

16 浏览
0 Comments

有没有办法检测当前可见的UIView是哪个?

我有一个与网络服务通信的类,在整个应用程序中被使用。我希望找到一种方法,在用户所在的任何视图上方显示一个错误消息的UIActionSheet。是否有一种简单的方法来做到这一点?如果可能的话,我希望避免在每个视图中使用回调方法。

0
0 Comments

在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。

当然,需要注意的是,使用这种方法也有可能会出现一些问题,比如在某些情况下可能无法正确获取到第一响应者。但总体来说,这种方法是一种可行的解决方案。

希望这篇文章对你有所帮助!

0
0 Comments

问题出现的原因:

用户想要找到当前可见的UIView,以便在调用UIActionSheet时使用。

解决方法:

1. 首先获取key window:

UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];

2. 然后通过执行performSelector方法获取第一响应者(first responder):

UIView *firstResponder = [keyWindow performSelector:(firstResponder)];

3. 最后,可以将获取到的view用于调用UIActionSheet。

需要注意的是,如果使用上述代码提交应用,可能会因为使用了非公开的API而被拒绝。

0