开发者

How to get the 'current' navigation controller from tab bar controller

开发者 https://www.devze.com 2023-03-14 12:34 出处:网络
Is there is a method to retrieve tab bar controller\'s current visible navigation controller? For example, I have 2 tabbars in my program (one navigation controller each) as below

Is there is a method to retrieve tab bar controller's current visible navigation controller?

For example, I have 2 tabbars in my program (one navigation controller each) as below

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url 
{   
   //Method is called when user clicks on a hyperlink in one of view controllers
    NSDictionary *dict = [self parseQueryString:[url query]];
    NSString *userID = [dict objectForKey:@"id"];
    NSString *navconTitle = [dict objectForKey:@"navcon"];


    //intention is to push a view controller onto the CURRENT navigation stack
    [navcon pushViewController:someViewController animated:YES];

    }
}

开发者_如何学Creturn YES;
}

Can anyone advise me how I can determine the current navigation controller so that I can push more viewcontrollers onto it?


Use the UITabBarControllers selectedViewController property.

navcon = (UINavigationController*)myTabBarController.selectedViewController;
[navcon pushViewController:someViewController animated:YES];


I think UITabBarController selectedViewController property should be what you are looking for.

So, from a UITabBarController method :-

 [self.selectedViewController pushViewController:someViewController animated:YES];


Updating Starsky's Swift answer to iOS 13 ("'keyWindow' was deprecated in iOS 13.0")

guard let tabBarVC = UIApplication.shared.windows.filter({$0.isKeyWindow}).first?.rootViewController as? UITabBarController else { return }
    if let currentNavController = tabBarVC.selectedViewController as? UINavigationController {
...
}


A Swift version, in case someone can't read Objective-C, with an additional solution for how to find the tabBar from anywhere. I use this to push to a screen when processing a notification.

guard let tabBarVC = UIApplication.shared.keyWindow?.rootViewController as? UITabBarController else { return }

if let currentNavController = tabBarVC.selectedViewController as? UINavigationController {
    currentNavController.pushViewController(someVC, animated: true)
}
0

精彩评论

暂无评论...
验证码 换一张
取 消