我正在为iPhone开发应用程序。我的问题是,我有一个uiviewcontroller,它有类似快捷方式的菜单。从那里,我希望能够将页面切换到故事板上的任何页面,但只是像这样将它呈现
[self.mainID dismissViewControllerAnimated:YES
completion:^{
checkin_vc *sampleView = [[checkin_vc alloc] init];
[self.mainID presentViewController:sampleView animated:YES completion:nil];
}];
似乎没有削减它。没有任何反应,如果我试图在不首先解除当前控制器的情况下呈现它,那么我会得到一个黑屏,很可能是因为我试图呈现类的对象,而不是在故事板上设置的实际视图控制器
我试过
[self.mainID dismissViewControllerAnimated:YES
completion:^{
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
checkin_vc *sampleVIew = (checkin_vc *)[mainStoryboard instantiateViewControllerWithIdentifier:@"checkin_sid"];
[self.mainID presentViewController:sampleVIew animated:YES completion:nil];
}];
解雇已经完成并且我已经返回到以前的视图控制器,但是完成部分永远不会完成。
我也收到了这个警告:
2014-05-12 00:05:31.388 Roborder [5503:60b]警告:尝试在窗口层次结构中显示其视图!
答案 0 :(得分:0)
我对故事板的体验是通过alloc init实例化不会起作用。首先确保您可能调用的每个视图控制器在故事板中都有一个storyboardID集。它只是一个唯一的字符串,但您可以使用它如下所示:
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
checkin_vc *sampleVIew = (checkin_vc *)[mainStoryboard instantiateViewControllerWithIdentifier:@"checkin_vc"];
//present as original code.
现在已经很晚了,所以如果我误解了这个问题,请告诉我。)
答案 1 :(得分:0)
Cocoadelica的代码是正确的,但你需要在故事板中给checkin_vc一个标识符来呈现它 - 检查左侧面板 - 显示身份检查器 - 在&#34中输入一个字符串;故事板ID" (例如:签入视图控制器) - 然后你可以在像这样的代码中使用它
checkin_vc *sampleVIew = (checkin_vc *)[mainStoryboard instantiateViewControllerWithIdentifier:@"checkin view controller"];
您不应该忽略快捷菜单(如果它是您的根菜单)因为您的checkin_vc将丢失它的父(viewcontroller)。
这是我的viewcontroller开关示例代码,希望它能为您提供帮助:
-(IBAction)GotoShop:(id)sender {
ShopViewController *viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"ShopController"];
[self presentViewController:viewController animated:YES completion:nil];
}
这将显示shopViewController
并在ShopViewController.m
中-(IBAction)QuitShop:(id)sender {
[self dismissViewControllerAnimated:YES completion:nil];
}
这将关闭shopViewController并返回它的parentviewcontroller ---在这种情况下返回到MenuViewController