1.當(dāng)這個(gè)控制器是navigation控制器的子控制器時(shí),從navigation的棧中找出你要的控制器.
//獲取navigationController棧內(nèi)的Viewcontroller
- (UIViewController *)getViewControlName:(NSString *)vcName
{
for (id obj in self.navigationController.viewControllers)
{
if ([obj isKindOfClass:NSClassFromString(vcName)]) return obj;
}
return nil;
}
2.當(dāng)控制器不是navigation的子控制器時(shí).獲取當(dāng)前屏幕控制器的方法:
PS:獲取到的是最頂層的控制器...
#pragma mark - 獲取當(dāng)前屏幕控制器
- (UIViewController *)getCurrentScreenViewController
{
UIViewController *result = nil;
UIWindow * window = [[UIApplication sharedApplication] keyWindow];
//app默認(rèn)windowLevel是UIWindowLevelNormal源譬,如果不是炕矮,找到UIWindowLevelNormal的
if (window.windowLevel != UIWindowLevelNormal)
{
NSArray *windows = [[UIApplication sharedApplication] windows];
for(UIWindow * tmpWin in windows)
{
if (tmpWin.windowLevel == UIWindowLevelNormal)
{
window = tmpWin;
break;
}
}
}
id nextResponder = nil;
UIViewController *appRootVC=window.rootViewController;
// 如果是present上來的appRootVC.presentedViewController 不為nil
if (appRootVC.presentedViewController) {
nextResponder = appRootVC.presentedViewController;
}else{
UIView *frontView = [[window subviews] objectAtIndex:0];
nextResponder = [frontView nextResponder];
}
if ([nextResponder isKindOfClass:[UITabBarController class]]){
UITabBarController * tabbar = (UITabBarController *)nextResponder;
UINavigationController * nav = (UINavigationController *)tabbar.viewControllers[tabbar.selectedIndex];
// UINavigationController * nav = tabbar.selectedViewController ; 上下兩種寫法都行
result=nav.childViewControllers.lastObject;
}else if ([nextResponder isKindOfClass:[UINavigationController class]]){
UIViewController * nav = (UIViewController *)nextResponder;
result = nav.childViewControllers.lastObject;
}else{
result = nextResponder;
}
return result;
}