我在UITabBarViewController中有四个选项卡。每个视图都将UIButtons添加到其导航栏中,每个选项卡都有一个" post按钮"这会将用户带到帖子页面。
如何引用已放置在我的故事板中的ViewController,以便将其传递给PresentViewController:
方法?
例如,这是从四个标签栏视图中的任何一个点击帖子按钮时使用的方法:
- (void)postInvoked:(UIBarButtonItem *)sender
{
[self presentViewController:______ animated:YES completion:nil];
}
什么是空白?我想我需要避免像这样引用UIViewController:
UIViewController * postPage = [[UIViewController alloc] init];
因为这会在每次用户导航到页面时创建页面的新实例。
答案 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"]
希望这有帮助。