Iphone 从一个ViewController导航到另一个

Iphone 从一个ViewController导航到另一个,iphone,objective-c,ios,xcode,storyboard,Iphone,Objective C,Ios,Xcode,Storyboard,我的故事板中有这样的设计: 如您所见,中间的ViewController连接到导航控制器(我刚刚使导航栏不可见)。在这个中间页面中,我以编程方式添加了所有控件() 问题是,当登录成功后,我想导航到第三个页面 - (void)logInViewController:(PFLogInViewController *)logInController didLogInUser:(PFUser *)user { [self dismissModalViewControllerAnimated:Y

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

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

问题是,当登录成功后,我想导航到第三个页面

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

将打印消息,但导航失败。你能帮忙吗?也许我需要修复故事板中的某些内容。

因为缺少很多相关代码/设置,我建议如下:

  • 使用此代码:

    -(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");
     }
    
  • 如果不起作用,请检查如何初始化ViewController2

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

    试试这种方式

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

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

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

    单程 让情节提要创建
    ViewController2
    的一种方法是在情节提要中创建推送序列

  • 打开你的故事板
  • 控件从登录视图控制器拖动到
    ViewController2
  • 选择“推送”序列类型
  • 点击segue
  • 选择视图>实用程序>显示属性检查器
  • 在属性检查器(窗口右侧)中,将segue标识符设置为“didLogIn”
  • 要执行segue,请执行以下操作:

    - (void)logInViewController:(PFLogInViewController *)logInController didLogInUser:(PFUser *)user {
        [self dismissModalViewControllerAnimated:YES];
        [self performSegueWithIdentifier:@"didLogIn" sender:self];
    }
    
    另一种方式 让情节提要创建
    ViewController2
    的另一种方法是为其提供一个情节提要ID,并要求情节提要按ID实例化视图控制器。然后您可以推送视图控制器

    在要求情节提要创建它之前,必须向情节提要中的
    ViewController2
    实例提供“情节提要ID”

  • 打开你的故事板
  • 选择
    ViewController2
    实例
  • 选择查看>实用程序>显示标识检查器
  • 在标识检查器(窗口右侧)中,输入“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];
    }
    

    使用情节提要标识符移动下一个viewController

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

    您能检查ViewController2的viedidload是否正常工作吗。第二,您不应该使用类似alloc]initWithNibName的东西。否不起作用。我无法加载它,这是我的问题。如果viewDidLoad不起作用,你能用NibName将你的alloc]init更改为alloc]init并查看吗?你也设置了你的rootviewcontroller吗?一切都在情节提要中,我如何使用NibName?不起作用。检查此链接可能会有所帮助::我在脚本的语法工作中遇到错误。你能多帮点忙吗?