如何在故事板中使用PresentViewController引用一个ViewController

9 浏览
0 Comments

如何在故事板中使用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因为这将在用户每次导航到该页面时创建一个新的实例。

0
0 Comments

在storyboard中,点击要展示的视图控制器,然后在工具栏中点击身份检查器。

在storyboard ID中输入任何字符串,例如"postView"。

将方法修改为以下内容:

- (void)postInvoked:(UIBarButtonItem *)sender
{
    [self presentViewController:[self.storyboard instantiateViewControllerWithIdentifier:@"postView"] animated:YES completion:nil];
}

换句话说:

假设你添加了storyboard ID,空白处应该填入[self.storyboard instantiateViewControllerWithIdentifier:@"storyBoardIDHere"]

希望能帮到你。

0
0 Comments

问题的出现原因是在使用Storyboard时,需要引用一个ViewController,但是不清楚如何获取该ViewController的引用。解决方法是根据是否已经存在该ViewController的实例来确定如何获取引用。

如果已经存在该ViewController的实例,只需在调用presentViewController:animated时传递一个指向该实例的指针即可。

如果不存在该实例,需要在Storyboard中为其分配一个唯一的ID,然后使用UIStoryboard的instantiateViewControllerWithIdentifier:方法创建该ViewController的实例,然后将指向新创建的ViewController的指针传递给presentViewController:animated

至于UIViewController的引用应该放在哪里?是在AppDelegate中还是在每个tabBarVC的每个VC中?我希望确保当我从tabVC的每个VC调用presentViewController:时,它使用的是同一个引用。

0
0 Comments

问题的原因是想要在多个类中引用一个在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)。

希望对你有帮助。即使在每个类中每次创建一个实例,也可以实现你的需求。但是,如果你想要保留一个实例,并在多个类中共享该实例,建议使用单例模式。

0