如何在故事板中使用PresentViewController引用一个ViewController
如何在故事板中使用PresentViewController引用一个ViewController
我在UITabBarViewController中有四个选项卡。每个视图都有添加到它们导航栏的UIButtons,并且每个选项卡都有一个“发布按钮”,点击该按钮将带用户转到发布页面。\n我如何引用已经存在于我的storyboard中的ViewController,以便我可以将其传递给PresentViewController:方法?\n例如,当从四个选项卡视图中的任何一个点击“发布按钮”时使用的方法如下:\n- (void)postInvoked:(UIBarButtonItem *)sender\n{\n [self presentViewController:______ animated:YES completion:nil];\n}\n空格中应该填什么?我认为我需要避免像这样引用UIViewController:\nUIViewController * postPage = [[UIViewController alloc] init];\n因为这将在用户每次导航到该页面时创建一个新的实例。
在storyboard中,点击要展示的视图控制器,然后在工具栏中点击身份检查器。
在storyboard ID中输入任何字符串,例如"postView"。
将方法修改为以下内容:
- (void)postInvoked:(UIBarButtonItem *)sender { [self presentViewController:[self.storyboard instantiateViewControllerWithIdentifier:@"postView"] animated:YES completion:nil]; }
换句话说:
假设你添加了storyboard ID,空白处应该填入[self.storyboard instantiateViewControllerWithIdentifier:@"storyBoardIDHere"]
希望能帮到你。
问题的出现原因是在使用Storyboard时,需要引用一个ViewController,但是不清楚如何获取该ViewController的引用。解决方法是根据是否已经存在该ViewController的实例来确定如何获取引用。
如果已经存在该ViewController的实例,只需在调用presentViewController:animated
时传递一个指向该实例的指针即可。
如果不存在该实例,需要在Storyboard中为其分配一个唯一的ID,然后使用UIStoryboard的instantiateViewControllerWithIdentifier:
方法创建该ViewController的实例,然后将指向新创建的ViewController的指针传递给presentViewController:animated
。
至于UIViewController的引用应该放在哪里?是在AppDelegate
中还是在每个tabBarVC的每个VC中?我希望确保当我从tabVC的每个VC调用presentViewController:
时,它使用的是同一个引用。
问题的原因是想要在多个类中引用一个在Storyboard中的ViewController,但不想每次都重新创建该ViewController的引用。解决方法是使用单例模式创建一个全局的ViewController实例,这样可以在整个应用程序中访问该实例,而不需要将其保存在AppDelegate中。
要解决这个问题,首先需要创建要展示的ViewController的实例。可以通过以下代码来实现:
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; UIViewController *controller = [mainStoryboard instantiateViewControllerWithIdentifier:@""];
其中,"Controller ID" 是在Interface Builder中的Storyboard ID属性(当选中控制器时,在Inspector选项卡中可见)。这将根据Storyboard中预配置的视图创建一个ViewController实例。
然后,可以根据需要展示该ViewController:
[self presentViewController:controller animated:YES completion:nil];
如果想要在多个类中引用该UIViewController,可以将上述实例化代码放在AppDelegate中。这样可以在需要的任何类中直接引用该ViewController实例,而不需要重新创建引用。
但是,如果希望只保留一个ViewController实例,可以使用单例模式。这样可以在整个应用程序中访问该实例,而不需要将其保存在AppDelegate中。可以参考这个链接了解如何使用单例模式:[Singleton Pattern](http://stackoverflow.com/q/5720029/3455244)。
希望对你有帮助。即使在每个类中每次创建一个实例,也可以实现你的需求。但是,如果你想要保留一个实例,并在多个类中共享该实例,建议使用单例模式。