如何从第二级建立UINavigationController(而不是从Delegate / RootController级别)

时间:2011-07-11 03:33:35

标签: iphone ios uinavigationcontroller uitableview

在以下情况下,使用UINavigationController的代码是什么?

  • 基础应用程序基于XCode 4模板“Utility Application”,有一个MainView& FlipSideView控制器(即MainView不使用UINavigationController,但以模态方式打开FlipSideview)
  • 在侧视图中,我有一个设置为执行配置设置的UITableView
  • 希望能够点击此FlipSideview UITableView的一行,然后使用UINavigationController概念,然后横向转换为以编程方式生成的UITableView,以便用户可以选择/更改值,然后一旦完成,他们就可以点击左上角的BACK BUTTON(UINavigationController将提供)
  • 然后重新整理XIB文件,MainView和FlipSideView将有一个XIB文件(来自模板),但以编程方式生成的“选择值”视图不会有一个

所以我真的不确定在这种情况下在哪里/如何创建/保持/使用UINavigationController?这里的代码是什么样的,UINavigationController变量将保留在哪里,是否需要修改FlipSideView XIB?

PS。事实上,FlipSideview本身是否必须更改为在顶部包含导航栏? (然后我必须将现有模板的DONE按钮从它的导航栏模式化到新的UINavigationController导航栏我猜)

PSS。尝试这个但得到一个错误:

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.uiNavController = [[UINavigationController alloc] initWithRootViewController:self];
    self.navigationController = self.uiNavController; 
    // ==> error: object cannot be set - either readonly property or no setter found
}

2 个答案:

答案 0 :(得分:1)

UINavigationControllers被设计为您的层次结构的ROOT视图控制器。

因此,在您的示例中,您应该让FlipSideViewController保持一个隐藏了NavigationBar的UINavigationController。然后,您可以将TableViewController作为“根”视图推送到堆栈。

当用户点击您的桌面视图中的单元格时,您可以实例化新视图&将它推到self.navigationController的堆栈中。确保将代码添加到新视图的viewWillAppear方法中以显示navigationBar&代码到viewDidDisappear再次隐藏navigationBar。

答案 1 :(得分:1)

为此,您的FlipSideViewController本身应该实现UINavigationControllerDelegate。

如何显示FlipSideView?

FlipSideViewController *flipSideView = [[FlipSideViewController alloc] init..];
[self presentModalViewController:flipSideView animated:YES];
[flipSodeView release]; 

喜欢这个????

然后你要把它改成

FlipSideViewController *flipSideView = [[FlipSideViewController alloc] init..];
UINavigationController *uiNavController = [[UINavigationController alloc] initWithRootViewController:flipSideView];
[self presentModalViewController:uiNavController animated:YES];
[flipSideView release]; 
[uiNavController release];