【问题标题】:Navigate from a ViewController to another从一个 ViewController 导航到另一个
【发布时间】:2012-10-10 19:43:37
【问题描述】:

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

如您所见,中间的 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]);
}

将打印消息,但导航失败。你能帮我吗?也许我需要在情节提要中修复一些问题。

【问题讨论】:

  • 您能否检查 ViewController2 的 viedidload 是否正常工作。其次,您不应该使用类似 alloc] initWithNibName 的东西。
  • 否不起作用。我无法加载它,这是我的问题。
  • 如果 viewDidLoad 不起作用,您可以将您的 alloc] init 更改为 alloc] initWithNibName 看看吗?
  • 你也设置了你的rootviewcontroller?
  • 一切都在故事板中,我该如何使用 NibName?

标签: iphone objective-c ios xcode storyboard


【解决方案1】:

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

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

一种方式

让情节提要创建ViewController2 的一种方法是在情节提要中进行推送转场。

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

要执行转场,请执行以下操作:

- (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];
}

【讨论】:

    【解决方案2】:

    试试这个方法,

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

    【讨论】:

    • 我在情节提要工作中遇到语法错误。你能提供更多帮助吗?
    【解决方案3】:

    由于缺少很多相关的代码/设置,我建议如下:

    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。

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

    【讨论】:

    【解决方案4】:

    使用 Storyboard Identifier 移动下一个 viewController

    nextViewController *objnextViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"nextViewControllerIdentifier"];
    
    [self.navigationController pushViewController: objnextViewController animated:YES];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-16
      • 1970-01-01
      • 1970-01-01
      • 2015-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多