这是AppDelegate中的didFinishLaunchingWithOptions方法。 让我解释一下场景,我在我的应用程序中开发了像facebook这样的sideMenu,但现在我必须根据屏幕更改sideMenu列表(ViewController)
这里的侧面菜单是SideMenuViewController,它是contains中的一个参数,最终成为window的rootViewController。
所以,最基本的问题是“如何更改成为windows的rootViewController的控制器或变量”
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
SideMenuViewController *leftMenuViewController = [[SideMenuViewController alloc] init];
self.container = [ContainerOfSideMenuByVeerViewController
containerWithCenterViewController:[self navigationController]
leftMenuViewController:leftMenuViewController];
self.window.rootViewController = self.container;
[self.window makeKeyAndVisible];
return YES;
}
如果任何程序员想要了解更多代码或要求,欢迎通过编辑我的代码或评论来提供。
答案 0 :(得分:14)
试试这个:
<YourAppDelegateClass> *app = [[UIApplication sharedApplication] delegate];
app.window.rootViewController = <YourRootViewController>;
不要忘记包含必要的标题(例如,您的AppDelegate),否则您将获得CE。 这个似乎有效:
答案 1 :(得分:13)
使用故事板
在另一个 ViewController 中,您可以使用以下代码:
self.view.window.rootViewController = [self.view.window.rootViewController.storyboard instantiateViewControllerWithIdentifier:@"**STORYBOARD ID**"];
内部 AppDelegate :
self.window.rootViewController = [self.window.rootViewController.storyboard instantiateViewControllerWithIdentifier:@"**STORYBOARD ID**"];
答案 2 :(得分:10)
使用Swift进行知识共享:
从app delegate.swift以外的类更改根视图控制器
let appdelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
var homeViewController = mainStoryboard.instantiateViewControllerWithIdentifier("HomeViewController") as! HomeViewController
let nav = UINavigationController(rootViewController: homeViewController)
appdelegate.window!.rootViewController = nav
使用动画更改rootviewcontroller可以实现:
UIView.transitionWithView(self.window!, duration: 0.5, options: UIViewAnimationOptions.TransitionFlipFromLeft, animations: {
self.window?.rootViewController = anyViewController
}, completion: nil)
我们可以编写与this太相似的泛化方法。
希望这对某人有用。