在一般應(yīng)用中,我們使用 addSubview 方法是添加到當(dāng)前控制器 ViewController 上的,但是對于某些情況下,我們需要把視圖添加到頂層控制器視圖上,即要獲取頂層視圖控制器。
- 當(dāng)前頂層窗口
//UIWindow *window = [[UIApplication sharedApplication].windows lastObject];
UIWindow *window = [UIApplication sharedApplication].keyWindow;
// 添加到窗口
[window addSubview:testView];
- 獲取View父視圖
- (UIViewController )viewController
{
for (UIView next = [self superview]; next; next = next.superview) {
UIResponder *nextResponder = [next nextResponder];
if ([nextResponder isKindOfClass:[UIViewController class]]) {
return (UIViewController *)nextResponder;
}
}
return nil;
}
- 獲取最上層控制器|當(dāng)前控制器
//獲取當(dāng)前最上層的控制器
-(UIViewController *) getTopOrCurrentViewController
{
UIWindow *topWindow = [UIApplication sharedApplication].keyWindow;
if (topWindow.windowLevel != UIWindowLevelNormal)
{
topWindow = [self returnWindowWithWindowLevelNormal];
}
UIViewController *topController = topWindow.rootViewController;
if(topController == nil)
{
topWindow = [UIApplication sharedApplication].delegate.window;
if (topWindow.windowLevel != UIWindowLevelNormal)
{
topWindow = [self returnWindowWithWindowLevelNormal];
}
topController = topWindow.rootViewController;
}
while(topController.presentedViewController)
{
topController = topController.presentedViewController;
}
if([topController isKindOfClass:[UINavigationController class]])
{
UINavigationController *nav = (UINavigationController*)topController;
topController = [nav.viewControllers lastObject];
while(topController.presentedViewController)
{
topController = topController.presentedViewController;
}
}
return topController;
}
-(UIWindow *) returnWindowWithWindowLevelNormal
{
NSArray *windows = [UIApplication sharedApplication].windows;
for(UIWindow *topWindow in windows)
{
if (topWindow.windowLevel == UIWindowLevelNormal)
return topWindow;
}
return [UIApplication sharedApplication].keyWindow;
}