阻止导航栏滚动表格

时间:2013-05-13 10:15:20

标签: objective-c ipad ios6 xcode4.3

我有一个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];
}

2 个答案:

答案 0 :(得分:2)

不要拖动导航栏并放下表格视图。这样您就可以将该视图(导航栏)设置为表视图的标题。

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

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

[self presentViewController:myNavController ...

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

答案 1 :(得分:1)

有几种方法可以实现这一目标。我试着根据我猜你当前的经验水平来描述其中一个我认为最容易的。

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

剩下的视图被第二个容器视图占用。这个包含一个UITableView UITableViewController( - 子类)是文件的所有者。

除非您更熟悉视图层次结构和视图控制器层次结构,否则不应该破坏表视图控制器和表视图之间具有1:1关系的模式(如默认情况下的sceleton代码和教程等)。每个UIViewController都有一个UITableViewController具有view属性。但是对于UITableViewControllerUITableView必须是UITableViewController而不是其他任何内容。标准UIView无法处理包含表视图和其他视图作为兄弟节点的view {{1}}属性。另外,关于滚动行为等,在表格视图中添加更多子视图并不是一个好主意。

通过分离它们,您可以处理表格,并且仍然可以使用教程代码示例,并且您可以在顶部创建一个不受表格影响的导航栏。

但是,我应该提一下,通过使用合适的导航控制器,您可以更轻松地完成所有这些工作。这将免费带入您的导航栏。如果不这样做,你必须有好的rasons。