使用storyboard时切换UIViewController

时间:2014-05-11 21:35:58

标签: ios objective-c uiviewcontroller

我正在为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]警告:尝试在窗口层次结构中显示其视图!

2 个答案:

答案 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)

  1. Cocoadelica的代码是正确的,但你需要在故事板中给checkin_vc一个标识符来呈现它 - 检查左侧面板 - 显示身份检查器 - 在&#34中输入一个字符串;故事板ID" (例如:签入视图控制器) - 然后你可以在像这样的代码中使用它

    checkin_vc *sampleVIew = (checkin_vc *)[mainStoryboard instantiateViewControllerWithIdentifier:@"checkin view controller"];

  2. 您不应该忽略快捷菜单(如果它是您的根菜单)因为您的checkin_vc将丢失它的父(viewcontroller)。

  3. 这是我的viewcontroller开关示例代码,希望它能为您提供帮助:

  4. MenuViewController.m中的

        -(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