从一个 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:
消息。您是否在登录视图控制器之上以模态方式呈现另一个视图控制器?
无论如何,当您在情节提要中配置了视图控制器时,您无法使用alloc
和init
创建视图控制器。您需要询问情节提要来创建它。有几种方法可以做到这一点。
一种方式
让情节提要创建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