0

我有一个UITableViewController在表格视图中成功列出了从 CoreData 实体获取的数据。

我想在顶部有一个导航栏,有几个按钮可以导航,但是当我添加导航栏时,它似乎位于表格内,位于任何列表下方,因此在浏览表格列表时会随着表格滚动.

因为它是一个UITableViewController我不能让表格区域看起来更小,所以我不知道如何在表格之外添加导航栏。

有关如何将导航栏修复到位以使其不会移动的任何建议。

这是用于设置导航栏的代码:

- (void)viewDidLoad
{

 UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0,0, 1024,44)];
 UINavigationItem *navItem = [[UINavigationItem alloc] initWithTitle:@"Observation details"];
 [navBar pushNavigationItem:navItem animated:NO];
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:self action:@selector(backButton)];
navItem.leftBarButtonItem = backButton;
UIBarButtonItem *detailsButton = [[UIBarButtonItem alloc] initWithTitle:@"Observation Details" style:UIBarButtonItemStyleBordered target:self action:@selector(detailsButton)];
navItem.rightBarButtonItem = detailsButton;
 [self.view addSubview:navBar];
}
4

2 回答 2

2

不要将导航栏拖放到表格视图上。这样,您将该视图(导航栏)设置为表视图的标题。

要做你想做的事,最简单的方法是使用导航控制器,将表格视图作为它的 rootTableView。

myNavController = [[UINavigationController alloc] initWithRootViewController:myVC];

[self presentViewController:myNavController ...

您也可以使用没有导航控制器的导航栏。为此,您必须在顶部设置一个带有导航控制器的视图,并在视图的其余部分设置一个表格视图。

于 2013-05-13T10:35:17.120 回答
1

有几种方法可以实现这一点。我尝试根据您当前的经验水平来描述我认为最简单的一种。

使用单独的视图控制器创建一个新的空视图。向类型容器视图的该视图添加两个子视图。这些视图旨在承载具有自己的视图控制器的视图。其中一个容器位于顶部,具有导航栏的大小并包含导航栏等。为此,您可以创建一个单独的视图控制器。但是,我看不出为什么不能是同一个视图控制器。(文件在 IB 中的所有者)它很可能是一个单独的实例/类。那取决于你。

剩余的视图被第二个容器视图占据。这个包含一个UITableViewUITableViewController-子类)是文件所有者的一个。

除非您更熟悉视图层次结构和视图控制器层次结构,否则您不应该打破表视图控制器和表视图之间具有 1:1 关系的模式(由默认的 sceleton 代码和教程等给出)。AUITableViewController具有view每个 UIViewController 都具有的属性。但是对于 aUITableViewController那必须是 aUITableView而不是别的。该标准UITableViewController无法处理包含表视图和其他视图作为同级的UIViewas属性。view另外,就其滚动行为等而言,向表格视图添加更多子视图并不是一个好主意。

通过将它们分开,您可以处理表格并仍然以教程代码为例,另外您可以在顶部有一个根本不受表格影响的导航栏。

但是,我应该提到,通过使用适当的导航控制器,您可以更轻松地完成所有这些工作。这将免费引入您的导航栏。你必须有充分的理由不这样做。

于 2013-05-13T11:24:04.840 回答