通常我们会从某个UIViewController对象中调用self.presentViewController(...),但是在一个不是UIViewController的帮助类中的类类型(静态)函数中如何显示一个新的视图控制器呢。
通常我们会从某个UIViewController对象中调用self.presentViewController(...),但是在一个不是UIViewController的帮助类中的类类型(静态)函数中如何显示一个新的视图控制器呢。
UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
UINavigationController *controller = (UINavigationController*)[storyBoard
instantiateViewControllerWithIdentifier: @"RootNavigationController"]; //set storyboard ID to your root navigationController.
YourViewController *vc = [storyBoard instantiateViewControllerWithIdentifier:@"YourViewController"]; // //set storyboard ID to viewController.
[controller setViewControllers:[NSArray arrayWithObject:vc] animated:YES];
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
appDelegate.window.rootViewController=controller;
Mayank Jain在Swift 4中的回答:
var storyBoard = UIStoryboard(name: "Main", bundle: Bundle.main)
var controller = storyBoard.instantiateViewController(withIdentifier: "RootNavigationController") as? UINavigationController
//set storyboard ID to your root navigationController.
var vc = storyBoard.instantiateViewController(withIdentifier: "YourViewController") as? YourViewController
// //set storyboard ID to viewController.
controller?.setViewControllers([vc], animated: true)
var appDelegate = UIApplication.shared.delegate as? AppDelegate
appDelegate?.window?.rootViewController = controller
直接不可能,您始终需要一个视图控制器/导航控制器实例。但是有一些可行的解决方法。
这取决于需求,您希望如何使用它。以下是一些建议 -
应用程序委托的导航控制器可以在任何地方访问,您可以使用它。
YourAppDelegate *delegate = (YourAppDelegate *) [UIApplication sharedApplication].delegate;
现在您可以使用 - delegate.window.rootViewController.navigationController
在帮助方法实例中传递从中调用它的导航控制器的实例。
+(void)myHelperMethodWithNavigationController:(UINavigationController*)navController {
-------
[navController pushViewController:yourNewCreatedController animated:YES];
}
在某个视图控制器中调用此方法时 -
[MyHelperClass myHelperMethodWithNavigationController:self.navigationController];