有没有办法用编码器在init中的故事板中推送vc?

时间:2013-11-15 00:02:42

标签: ios objective-c storyboard

所以我在尝试推送一些Viewcontrollers时遇到问题,基本上当应用程序加载它时检查你是否已经注册,如果你是,它会将你发送到diff vc,如果你没有注册它会将你发送给RegisterVC。它是在storyboard中完成的,问题是当我把代码放在viewDidLoad中时,推送工作但我无法从故事板中看到rootviewcontroller但是如果我用编码器将代码移动到init中我可以看到viewcontroller但是push return的在应该推向新vc的方法中为零,因此转换永远不会发生。

代码如下所示:

    if (emp == nil) {
        [self gotoRegisterView];
    }
    else {
        [self gotoSMWView];
    }

和:

- (void) gotoRegisterView {
    UIViewController* vc = [self.storyboard  instantiateViewControllerWithIdentifier:@"RegisterVC"];
    [self.navigationController pushViewController:vc animated:YES];
}

- (void) gotoSMWView {
    UIViewController* vc = [self.storyboard instantiateViewControllerWithIdentifier:@"SMWVC"];
    [self.navigationController pushViewController:vc animated:YES];
}

非常感谢任何建议。

1 个答案:

答案 0 :(得分:0)

如果您正在使用故事板,只需将主场景连接到您想从那里调用的任何其他场景。然后,Ctrl+Drag来自最初的VIEW CONTROLLER(不是视图控制器上的元素,而是来自控制器本身)。然后单击刚刚创建的segues并为它们提供良好的描述性名称。对于此示例,我们只会说segue1segue2

现在,如果segue1带您到RegisterViewsegue2SMWView,那么您可以这样做:

- (void) gotoRegisterView {
    [self performSegueWithIdentifier:@"segue1" sender:self];
}

- (void) gotoSMWView {
    [self performSegueWithIdentifier:@"segue2" sender:self];
 }

如果您需要在这些视图控制器上进行任何其他初始化或设置,您可以覆盖此方法:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

在此方法中,您可以使用此模板检查已调用的segue

if([[segue identifier] isEqualToString:@"segue1"])

您可以像这样获得目标视图控制器的实例:

YourViewController *vc = [segue destinationViewController];