所以我在尝试推送一些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];
}
非常感谢任何建议。
答案 0 :(得分:0)
如果您正在使用故事板,只需将主场景连接到您想从那里调用的任何其他场景。然后,Ctrl+Drag
来自最初的VIEW CONTROLLER
(不是视图控制器上的元素,而是来自控制器本身)。然后单击刚刚创建的segues并为它们提供良好的描述性名称。对于此示例,我们只会说segue1
和segue2
。
现在,如果segue1
带您到RegisterView
,segue2
到SMWView
,那么您可以这样做:
- (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];