在我的应用中,我需要通过点击按钮转到另一个UIViewController
,但是当我在新UIViewController
中执行此操作时,它仅显示我以编程方式设置的内容。
我用过:
NewSubject *NewS = [[NewSubject alloc] initWithNibName:nil bundle:nil];
[self presentViewController:NewS animated:YES completion:nil];
"NewSubject"
是我需要去的UIViewController
,但是我希望计算机也能显示Storyboard
设置的内容。
答案 0 :(得分:1)
您是否在第一个选项卡(显示标识检查器)中的Storyboard
,NewSubject视图控制器中设置了StoryBoard ID?
您应该将其设置为某个名称,例如"NewSubject"
并按以下方式使用它:
NewSubject *NewS = [self.storyboard instantiateViewControllerWithIdentifier:@"NewSubject"];
[self.navigationController pushViewController:NewS animated:YES];
答案 1 :(得分:0)
我希望计算机也显示我在Storyboard中设置的内容。
如果您使用的是故事板,则使用-initWithNibName:bundle:
是错误的方法。您可以使用UIStoryboard的-instantiateViewControllerWithIdentifier:
方法创建一个在故事板中定义的新视图控制器,但更典型的方法是让您的按钮在两个视图控制器之间触发一个segue。
试试这个:
在编辑故事板时,控制 - 从按钮拖动到新的视图控制器。应该会出现一个弹出菜单,让您选择在视图控制器之间切换的方式 - 推(将新控制器推到导航堆栈顶部),模态(以模态方式显示视图控制器)等。选择合适的一个
在简单的情况下,你已经完成了 - 没有必要编写任何代码只是为了让转换发生。 segue负责创建新的视图控制器并为您执行转换。但是,您经常希望将现有视图控制器中的某些数据传递给新视图控制器。如果是这种情况,请在现有视图控制器中实现-prepareForSegue:sender:
- 此方法使您有机会传递所需的任何数据。它看起来像这样:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// It doesn't hurt to check that it's the segue that you expect
if ([segue.identifier isEqualToString:@"MySegueIdentifier"]) {
NewViewController *newVC = segue.destinationViewController;
// This is your chance to set properties or call methods to pass data to the new view controller
newVC.foo = self.foo;
newVC.bar = self.bar;
}
}