从ViewController导航到另一个

时间:2012-10-10 19:43:38

标签: iphone objective-c ios xcode storyboard

我在故事板中有这个设计:

enter image description here

如您所见,中间ViewController连接到导航控制器(我只是让导航栏不可见)。在这个中间页面中,我以编程方式添加所有控件(using Parse mobile platform login wizard)。

当我成功完成登录时,我想要导航到第三页。

- (void)logInViewController:(PFLogInViewController *)logInController didLogInUser:(PFUser *)user {
    [self dismissModalViewControllerAnimated:YES];
    ViewController2 *viewController = [[[ViewController2 alloc] init] autorelease];
    [self.navigationController pushViewController:viewController animated:YES];
    printf("%s", [@"Ali" UTF8String]);
}

将打印消息,但导航失败。你能帮我吗?也许我需要在故事板中修复一些东西。

4 个答案:

答案 0 :(得分:2)

我不确定您是否应该发送dismissModalViewControllerAnimated:消息。您是否在登录视图控制器上以模态方式呈现另一个视图控制器?

无论如何,在故事板中配置视图控制器后,无法使用allocinit创建视图控制器。您需要让故事板创建它。有几种方法可以做到这一点。

单程

让故事板创建ViewController2的一种方法是在故事板中进行推送。

  1. 打开你的故事板。
  2. 按住Ctrl键并从登录视图控制器拖动到ViewController2
  3. 选择“推送”segue类型。
  4. 点击segue。
  5. 选择视图>公用事业>显示属性检查器。
  6. 在Attributes Inspector(窗口右侧)中,将segue标识符设置为“didLogIn”。
  7. 要执行segue,请执行以下操作:

    - (void)logInViewController:(PFLogInViewController *)logInController didLogInUser:(PFUser *)user {
        [self dismissModalViewControllerAnimated:YES];
        [self performSegueWithIdentifier:@"didLogIn" sender:self];
    }
    

    另一种方式

    让故事板创建ViewController2的另一种方法是给它一个故事板ID,并要求故事板按ID实例化视图控制器。然后你可以推动视图控制器。

    在您要求故事板创建故事板之前,您必须向故事板中的ViewController2实例提供“故事板ID”。

    1. 打开你的故事板。
    2. 选择ViewController2实例。
    3. 选择视图>公用事业>显示Identity Inspector。
    4. 在Identity Inspector(窗口右侧)中,输入“viewController2”。案例很重要!
    5. 然后,在您的代码中,请求故事板实例化viewController2

      - (void)logInViewController:(PFLogInViewController *)logInController didLogInUser:(PFUser *)user {
          [self dismissModalViewControllerAnimated:YES]; // Should this be here?
          ViewController2 *viewController = [[[ViewController2 alloc] init] autorelease];
          [self.navigationController pushViewController:viewController animated:YES];
      }
      

答案 1 :(得分:1)

试试这种方式,

 ViewController2 *myViewController=[storyboard instantiateViewControllerWithIdentifier:@"TheNameOfYourController"]
    [self.navigationController pushViewController:myViewController animated:YES];

答案 2 :(得分:0)

由于缺少大量相关代码/设置,我建议如下:

  1. 使用此代码:

    -(void)logInViewController:(PFLogInViewController *)logInController didLogInUser:(PFUser *)user {
     [self dismissViewControllerAnimated:YES completion:NULL];
    
     Class klass = [[NSBundle mainBundle] classNamed:@"ViewController2"];
     ViewController2 *viewController = [[klass alloc] init];
     [self.navigationController pushViewController:viewController animated:YES];
     [viewController release];
    
     NSLog("%@", @"Ali");
     }
    
  2. 如果这不起作用,请检查您如何初始化ViewController2。

  3. 如果所有这些都没有用,请尝试发布更相关的代码。

答案 3 :(得分:0)

使用Storyboard Identifier

移动下一个viewController
nextViewController *objnextViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"nextViewControllerIdentifier"];

[self.navigationController pushViewController: objnextViewController animated:YES];