如何使用PresentViewController在storyboard中引用ViewController

时间:2014-03-30 20:15:23

标签: ios objective-c xcode

我在UITabBarViewController中有四个选项卡。每个视图都将UIButtons添加到其导航栏中,每个选项卡都有一个" post按钮"这会将用户带到帖子页面。

如何引用已放置在我的故事板中的ViewController,以便将其传递给PresentViewController:方法?

例如,这是从四个标签栏视图中的任何一个点击帖子按钮时使用的方法:

- (void)postInvoked:(UIBarButtonItem *)sender
{
    [self presentViewController:______ animated:YES completion:nil];
}

什么是空白?我想我需要避免像这样引用UIViewController:

UIViewController * postPage = [[UIViewController alloc] init];

因为这会在每次用户导航到页面时创建页面的新实例。

3 个答案:

答案 0 :(得分:3)

您必须创建要呈现的控制器实例:

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil];
UIViewController *controller = [mainStoryboard instantiateViewControllerWithIdentifier: @"<Controller ID>"];

这将创建带有故事板预配置视图的控制器。

接口生成器中的

@“Controller ID”==“Storyboard ID”属性。 (选择控制器时的检查器选项卡)

并按照您的意愿展示。

[self presentViewController:controller  animated:YES completion:nil];

答案 1 :(得分:1)

取决于。

一个坐在你的故事板中的VC&#34;不存在。这只是一个模板,可让您在需要时创建VC的新副本。

如果您已在内存中拥有此VC的副本,只需在致电presentViewController:animated时将指针t输出。

如果没有,则需要在故事板中为其提供唯一ID,然后使用UIStoryboard方法instantiateViewControllerWithIdentifier:创建VC实例,然后将指向新创建的VC的指针传递给{{ 1}}

答案 2 :(得分:1)

1)在故事板中,单击要显示的视图控制器,然后在实用程序窗格中单击身份检查器。

2)在故事板ID中输入任何字符串,例如“postView”。

3)将方法编辑为:

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

换句话说:

假设您添加了故事板ID,则应使用

填充空格
[self.storyboard instantiateViewControllerWithIdentifier:@"storyBoardIDHere"]

希望这有帮助。