非视图类中想要随时展示一个view时,可以直接声明一个view,然后只需要将被展示的view加到当前view的子视图,或者想把一个view随时加到一个viewcontroller时,这样就需要获得当前屏幕的这个viewcontroller了,这个方法在网上找到了,自己用了的确可以用
//获取当前屏幕显示的viewcontroller
- (UIViewController *)getCurrentVC
{
UIViewController *result = nil;
UIWindow * window = [[UIApplication sharedApplication] keyWindow];
if (window.windowLevel != UIWindowLevelNormal)
{
NSArray *windows = [[UIApplication sharedApplication] windows];
for(UIWindow * tmpWin in windows)
{
if (tmpWin.windowLevel == UIWindowLevelNormal)
{
window = tmpWin;
break;
}
}
}
if ([window subviews].count>0) {
UIView *frontView = [[window subviews] objectAtIndex:0];
id nextResponder = [frontView nextResponder];
if ([nextResponder isKindOfClass:[UIViewController class]]){
result = nextResponder;
}
else{
result = window.rootViewController;
}
}
else{
result = window.rootViewController;
}
if ([result isKindOfClass:[UITabBarController class]]) {
result = [((UITabBarController*)result) selectedViewController];
}
if ([result isKindOfClass:[UINavigationController class]]) {
result = [((UINavigationController*)result) visibleViewController];
}
return result;
}
然后在想使用的地方,直接就可以调用这个函数,然后加上了,比如说现在声明的那个view里面写了这个,当想加上去的时候可以直接这样
[[self getCurrentVC].view addSubview:self]
版权属于:东哥笔记 - DongGe.org
本文链接:https://dongge.org/blog/9.html
自2017年12月26日起,『转载以及大段采集进行后续编辑』须注明本文标题和链接!否则禁止所有转载和采集行为!
2 条评论
这个获得是当前显示的Tab控制器,并不能具体到N层之后的具体ViewController
受教了,之前用这个是为了随时在当前界面显示一个东西用的