1

我想加载没有按钮的视图控制器。我将标识符设置为 10 并尝试使用

if(...){ 
//load ViewController2
UIViewController *vc = [[self storyboard] instantiateViewControllerWithIdentifier:@"10"];
[self.navigationController pushViewController:vc];
}

这是我的项目http://www.sendspace.com/file/kfjhd5

有什么问题?

4

1 回答 1

10

您问题中的上述代码很好。我知道您问的是如何在没有按钮的情况下执行此操作,但您演示的问题是您使用了一个按钮,但没有将其正确连接到IBAction. 您goNext应该在 .h 中定义为:

- (IBAction)goNext:(id)sender;

实施应该是:

- (IBAction)goNext:(id)sender
{
    UIViewController *vc=[[self storyboard] instantiateViewControllerWithIdentifier:@"10"];
    [self.navigationController pushViewController:vc animated:YES];
}

我想你是IBAction手动创建的。未来值得注意的是,如果你control从按钮向下拖动(或右键拖动)到助手编辑器文件,你可以自动创建你的IBAction界面,并且不会发生这种错误:

自动创建 IBAction


顺便说一句,我个人更喜欢使用 segue,所以我首先定义视图控制器本身之间的 push segue。在 Xcode 6 中,可以control从场景上方的视图控制器图标 - 拖动到目标场景:

创建segue xcode 6

在 6 之前的 Xcode 版本中,可以control从场景下方栏中的视图控制器图标 - 拖动:

创建转场

然后我在 Interface Builder 中选择 segue 并给它一个“故事板标识符”(在这个例子中,我称之为它pushTo10):

指定转场 ID

然后我让我goNext执行那个segue,而不是手动调用pushViewController

- (IBAction)goNext:(id)sender
{
    [self performSegueWithIdentifier:@"pushTo10" sender:self];
}

这样做的好处是我的故事板现在直观地代表了我的应用程序的流程(而不是看起来有一个场景漂浮在那里),并且像导航栏这样的图形元素在故事板中正确表示。

您不必这样做,但这是另一种需要注意的选择。

于 2012-09-19T17:37:02.453 回答