2

我的故事板中有这样的设计:

在此处输入图像描述

如您所见,中间的 ViewController 连接到导航控制器(我刚刚使导航栏不可见)。在这个中间页面中,我以编程方式添加了所有控件(使用 Parse 移动平台登录向导)。

问题是我想在登录成功后导航到第三页。

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

4 回答 4

2

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

无论如何,当您在情节提要中配置了视图控制器时,您无法使用allocand创建视图控制器init。您需要询问情节提要来创建它。有几种方法可以做到这一点。

单程

让故事板创建您的一种方法ViewController2是在您的故事板中制作一个 push segue。

  1. 打开你的故事板。
  2. 按住 Control 从登录视图控制器拖动到ViewController2.
  3. 选择“推”segue 类型。
  4. 点击转场。
  5. 选择“视图”>“实用工具”>“显示属性检查器”。
  6. 在 Attributes Inspector(窗口右侧)中,将 segue 标识符设置为“didLogIn”。

要执行 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. 选择“视图”>“实用工具”>“显示身份检查器”。
  4. 在 Identity Inspector(窗口右侧)中,输入“viewController2”。案例很重要!

然后,在您的代码中,让故事板实例化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];
}
于 2012-10-11T03:27:22.080 回答
1

试试这个方法

 ViewController2 *myViewController=[storyboard instantiateViewControllerWithIdentifier:@"TheNameOfYourController"]
    [self.navigationController pushViewController:myViewController animated:YES];
于 2012-10-10T20:00:14.663 回答
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。

如果这一切都没有帮助,请尝试发布更多相关代码。

于 2012-10-10T19:59:19.510 回答
0

使用 Storyboard Identifier 移动下一个 viewController

nextViewController *objnextViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"nextViewControllerIdentifier"];

[self.navigationController pushViewController: objnextViewController animated:YES];
于 2016-06-30T09:19:15.750 回答