从一个 ViewController 导航到另一个

Posted

技术标签:

【中文标题】从一个 ViewController 导航到另一个【英文标题】:Navigate from a ViewController to another 【发布时间】: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? 【参考方案1】:

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

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

一种方式

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

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

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

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

另一种方式

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

在您请求故事板创建它之前,您必须为故事板中的ViewController2 实例提供一个“故事板 ID”。

    打开故事板。 选择ViewController2 实例。 选择视图 > 实用程序 > 显示身份检查器。 在 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】:

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

    使用此代码:

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

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

【讨论】:

不起作用。检查此链接也许会有所帮助:parse.com/docs/ios/api/Protocols/…:【参考方案4】:

使用 Storyboard Identifier 移动下一个 viewController

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

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

【讨论】:

以上是关于从一个 ViewController 导航到另一个的主要内容,如果未能解决你的问题,请参考以下文章

从 UITableView 导航到另一个 ViewController 然后返回到 TableViewController 会导致一些元素消失

如何在单击按钮时从一个视图控制器导航到另一个视图控制器?

导航到另一个 ViewController 时 UITableView 行有问题

导航到另一个ViewController后没有获取Tabbar

从 UIAlertController 按钮单击导航到 ViewController

在自定义表格视图单元格按钮操作中导航到另一个 Viewcontroller