我有一个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];
}
答案 0 :(得分:2)
不要拖动导航栏并放下表格视图。这样您就可以将该视图(导航栏)设置为表视图的标题。
要做你想做的事,最简单的方法是使用导航控制器,将表视图作为rootTableView。
myNavController = [[UINavigationController alloc] initWithRootViewController:myVC];
[self presentViewController:myNavController ...
您还可以使用不带导航控制器的导航栏。为此,您必须在顶部设置一个带有导航控制器的视图,并在视图的其余部分填充一个表视图。
答案 1 :(得分:1)
有几种方法可以实现这一目标。我试着根据我猜你当前的经验水平来描述其中一个我认为最容易的。
使用单独的视图控制器创建一个新的空视图。 将两个子视图添加到类型容器视图的该视图中。这些视图旨在承载具有自己的视图控制器的视图。其中一个容器位于顶部,具有导航栏的大小并包含导航栏等。 对于那个,你可以创建一个单独的视图控制器。但是,我认为没有理由不能成为同一个视图控制器。 (文件的所有者在IB) 它可能是一个单独的实例/类。那取决于你。
剩下的视图被第二个容器视图占用。这个包含一个UITableView
UITableViewController
( - 子类)是文件的所有者。
除非您更熟悉视图层次结构和视图控制器层次结构,否则不应该破坏表视图控制器和表视图之间具有1:1关系的模式(如默认情况下的sceleton代码和教程等)。每个UIViewController都有一个UITableViewController
具有view
属性。但是对于UITableViewController
,UITableView
必须是UITableViewController
而不是其他任何内容。标准UIView
无法处理包含表视图和其他视图作为兄弟节点的view
{{1}}属性。另外,关于滚动行为等,在表格视图中添加更多子视图并不是一个好主意。
通过分离它们,您可以处理表格,并且仍然可以使用教程代码示例,并且您可以在顶部创建一个不受表格影响的导航栏。
但是,我应该提一下,通过使用合适的导航控制器,您可以更轻松地完成所有这些工作。这将免费带入您的导航栏。如果不这样做,你必须有好的rasons。