iOS跳转到不同的视图

时间:2010-10-07 02:38:06

标签: iphone ios xcode cocoa-touch

我有一个基于导航的应用程序。根视图是项目列表。从这个根视图中,您可以点击表格单元格到项目的详细视图。或者,您可以通过导航栏中的“添加”按钮转到表单视图以创建新项目。

我的问题是,一旦创建了新对象,我怎么能从表单视图跳转到详细视图?

我不想在表单视图的顶部推送详细信息视图,因为我希望根表视图是用户在详细视图中按下“后退”导航按钮后看到的内容。

我尝试了以下内容。它弹出到根视图很好,但在此之后不会推送详细视图..

[context save:&error];

[self.navigationController popToRootViewControllerAnimated:NO];

// display detail view
GoalDetailViewController *detailViewController = [[GoalDetailViewController alloc] initWithNibName:@"GoalDetailViewController" bundle:nil];

// Pass the selected object to the new view controller.
detailViewController.goal = goal;

[self.navigationController pushViewController:detailViewController animated:YES];
[detailViewController release];

非常感谢任何帮助和方向:)

干杯!

2 个答案:

答案 0 :(得分:3)

通常,您将使用以模态方式显示的视图控制器来实现添加按钮。

[self presentModalViewController:modalViewController animated:YES];

表示它出现在屏幕底部(请参阅添加联系人)。然后,当他们按下右上角的完成后,您可以在导航控制器上按下详细视图控制器而不为其设置动画,使后退按钮返回到原始列表视图。

答案 1 :(得分:1)

这不是你在应用中经常看到的东西,但它可以像这样完成:

// Get the current view controller stack.
NSMutableArray *viewControllers = [NSMutableArray arrayWithArray:self.navigationController.viewControllers];

// Instantiate your new detail view controller
GoalDetailViewController *detailViewController = [[GoalDetailViewController alloc] initWithNibName:@"GoalDetailViewController" bundle:nil];
detailViewController.goal = goal;

// Remove the topmost view controller from the stack
[viewControllers removeLastObject];
// Replace it with the new detail view controller
[viewControllers addObject:detailViewController];

// Change the view controller stack
[self.navigationController setViewControllers:viewControllers animated:YES];

// Clean up
[detailViewController release];

你得到的动画究竟是here