转到另一个Viewcontroller

时间:2014-06-05 12:47:50

标签: ios objective-c uiviewcontroller uibutton

在我的应用中,我需要通过点击按钮转到另一个UIViewController,但是当我在新UIViewController中执行此操作时,它仅显示我以编程方式设置的内容。

我用过:

NewSubject *NewS = [[NewSubject alloc] initWithNibName:nil bundle:nil];
[self presentViewController:NewS animated:YES completion:nil];

"NewSubject"是我需要去的UIViewController,但是我希望计算机也能显示Storyboard设置的内容。

2 个答案:

答案 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;
    }
}