如何使用instantiateViewControllerWithIdentifier并在哪里使用?

4
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard"
                                                     bundle: nil];

MenuScreenViewController *controller = (MenuScreenViewController*)[mainStoryboard 
                                               instantiateViewControllerWithIdentifier: @"<Controller ID>"];

如果我必须确保当前视图使用标识符实例化,那么我应该在哪里编写此代码?这意味着如果我在此类上编写任何代码,则必须在此视图控制器加载时显示。另外,如何使用它?我不想创建menuscreenviewcontroller的实例。这意味着我必须使用self,但我使用了self.view,但它不起作用。

2个回答

7

您需要推送或呈现您创建的视图控制器。您无法通过实例化直接更改控制器的视图。

例如,您需要使用以下代码触发转换(可能是一个按钮操作):

MenuScreenViewController* controller = (MenuScreenViewController*)[ourStoryBoard instantiateViewControllerWithIdentifier:@"<Controller ID>"];

controller.controlFlag = YES;
controller.controlFlag2 = NO; // Just examples

//These flags will be set before the viewDidLoad of MenuScreenViewController
//Therefore any code you write before pushing or presenting the view will be present after 

[self.navigationController pushViewController:controller animated:YES];
// or [self presentViewController:controller animated:YES];

谢谢。但是如果我想让这个屏幕在启动画面后出现,那我该怎么做呢?因此,我没有任何按钮或任何方式来触发过渡。我只想让这个屏幕与相应的代码同步,以便在启动画面加载完成后出现这个屏幕。我没有启动画面的类。它只是default.png。 - CodeGeek123
2
你可以使用 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions; 或者直接在你的故事板中将该视图控制器设置为根视图控制器。只需拖动一个导航控制器并将你的视图控制器设置为该导航控制器的根视图控制器即可。如果你想在代码中实现,你可以将这个视图控制器设置为根视图控制器,或者使用rootViewController构造函数创建一个UINavigationController,并将上面创建的控制器作为参数放入其中。 - Ugur Kumru

2

根据Uğur Kumru的回答,稍作修改:如果您没有使用导航控制器,并且正在针对iOS 5.0+进行开发,则需要使用:

MenuScreenViewController* controller = (MenuScreenViewController*)[ourStoryBoard instantiateViewControllerWithIdentifier:@"<Controller ID>"];
[self presentViewController:controller animated:YES completion:nil];

如果你省略了completion:nil,你将面临错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接