0

所以我在尝试推送一些 Viewcontrollers 时遇到问题,基本上当应用程序加载它检查你是否已经注册,如果你已经注册,它会将你发送到 diff vc,如果你没有注册,它会将你发送到 RegisterVC。它是在情节提要中完成的,问题是当我将代码放入 viewDidLoad 时,推送工作但我无法从情节提要中看到 rootviewcontroller 但如果我将代码移动到带有编码器的 init 中,我可以看到视图控制器但推送返回nil 在应该推送到新 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];
}

任何建议都非常感谢。

4

1 回答 1

0

如果您使用情节提要,只需将主场景连接到您想从那里调用的任何其他场景。然后,Ctrl+Drag从最初VIEW CONTROLLER(不是视图控制器上的元素,而是控制器本身)开始。然后单击您刚刚创建的 segues 并为它们提供良好的描述性名称。对于这个例子,我们只会说segue1and segue2

现在,如果segue1带你到,RegisterView然后你可以这样做:segue2SMWView

- (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];
于 2013-11-15T00:07:45.693 回答