将UINavigationBar添加到以模态方式呈现的TableViewController中?

时间:2013-06-22 07:49:11

标签: ios objective-c cocoa-touch ios6

假设我正在尝试创建类似联系人应用的内容。我有一个TableViewController(TVC),您可以在其中选择一个项目并查看有关它的所有信息。您可以点击编辑,然后会显示带有静态单元格的TVC。同样的TVC也用于添加新项目。

我目前有一台我正在尝试重复使用的TVC。当用户正在编辑我的模型时,我将TVC推入导航堆栈,但当用户创建新项目时,我会以模态方式呈现TVC。

显然,当自动推送TVC时,它会获得一个NavigationBar。另一方面,当我以模态方式呈现它时,我创建了自己的NavigationBar(带有按钮和我需要的其他所有东西)并将其添加为子视图。这提出了两个问题:

  • NavigationBar位于第一个单元格的顶部。
  • NavigationBar与其他单元格一起滚动。

对于我所读到的,这是因为我将NavigationBar添加到TVC本身 在导航控制器内部使用TableView听起来像一个选项,但没有TVC,我的TableView上就没有静态单元格。

我想过不会重新使用我的TVC,但我仍然遇到同样的问题,因为我需要一个顶部有条形电视的TVC。

如果以模态方式呈现静态单元格,如何将一个NavigationBar添加到TVC? 有没有其他方法可以解决这个问题?

顺便说一下,我正在使用故事板而我的目标是iOS6 +,因此我无法使用presentModalViewController:

1 个答案:

答案 0 :(得分:2)

您始终可以使用代码创建UINavigationController,然后将现有的表视图控制器设置为根视图控制器。然后,您可以以模态方式呈现新创建的UINavigationController。

使用UINavigationController实例,您将添加UINavigationBar。

使用 instantiateViewControllerWithIdentifier 方法从故事板中获取现有的UITableViewController。不要忘记首先通过设置Storyboard ID在故事板中设置标识符。例如,下面我将标识符设置为CategoriesViewController。

setting Storyboard ID

然后我可以使用以下代码获取它:

UITableViewController *tableViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"CategoriesViewController"];
UINavigationController *navcon = [[UINavigationController alloc] initWithRootViewController:tableViewController];
[self presentViewController:navcon animated:YES completion:nil];