0

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

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

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

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

对于我所阅读的内容,发生这种情况是因为我将 NavigationBar 添加到 TVC 本身。
在导航控制器中使用 TableView 听起来像是一种选择,但如果没有 TVC,我的 TableView 上就不能有静态单元格。

我考虑过不重复使用我的 TVC,但我仍然会遇到同样的问题,因为我需要一个顶部有条的 TVC。

以模态方式呈现时,如何将 NavigationBar 添加到具有静态单元格的 TVC?有没有另一种方法来解决这个问题?

顺便说一句,我正在使用情节提要,而且我的目标是 iOS6+,所以我不能使用presentModalViewController:

4

1 回答 1

2

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

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

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

设置情节提要 ID

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

UITableViewController *tableViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"CategoriesViewController"];
UINavigationController *navcon = [[UINavigationController alloc] initWithRootViewController:tableViewController];
[self presentViewController:navcon animated:YES completion:nil];
于 2013-06-22T08:22:07.430 回答