2013-05-13 101 views
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]; 
} 
+0

您使用的是Interface Builder吗? – Groot 2013-05-13 10:26:25

+0

使用故事板?我应该以编程方式做这个吗? – RGriffiths 2013-05-13 10:27:18

+0

你是如何添加导航栏以及它是什么类型的UI项目的?系统提供的标准导航栏不应该滚动。 – 2013-05-13 10:32:05

回答

2

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

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

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

[self presentViewController:myNavController ... 

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

+0

@RichardGriffiths:发布代码你是如何以编程方式进行的。 – Rakesh 2013-05-13 10:52:54

+0

@Richard如果你正在使用故事板,你只需要包含一个导航控制器。这很简单。如果您想以编程方式执行此操作,则必须声明一个变量或属性以保留导航控制器。我要编辑我的答案,告诉你如何去做。 – Gabriel 2013-05-13 11:19:54

+0

非常感谢您的帮助。你能看到上面的回应吗?我现在有一个导航控制器,它可以显示表格,但仍然无法让导航栏表现出来! – RGriffiths 2013-05-13 17:08:26

1

有几种方法可以实现这一点。我试图描述其中的一种,我认为这是最简单的,根据我认为是你目前的经验水平。

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

其余视图被第二个容器视图占用。这其中包含UITableView,其中UITableViewController(-subclass)是文件的所有者。

除非您更熟悉视图层次结构和视图控制器层次结构,否则不应该使用表视图控制器和表视图之间具有1:1关系的模式(如默认sceleton代码和教程等所给出的) 。 A UITableViewController与每个UIViewController都有一个view属性。但是对于一个UITableViewController,它必须是UITableView而没有别的。标准UITableViewController不能处理UIView作为view属性,该属性包含表视图和其他视图作为兄弟。再加上它是不是一个好主意,添加更多的子视图的滚动行为等方面的表视图

通过分离他们你可以处理表,并仍然采取示例straigt教程代码加上你可以有一个导航在顶部不受桌子影响的酒吧。

但是,我应该提及,通过使用适当的导航控制器可以让所有这些变得更容易。这将免费提供您的导航栏。你不能这样做,你必须拥有良好的职业。

+0

我真的很感谢你投入这个时间 - 谢谢。我正在尝试导航控制器方法,因为大家都在说它非常简单。我得到了表视图的工作,但由于某种原因导航栏根本不显示应用程序运行时。我是新手导航控制器,我不确定是否需要这两个视图(一个导航和一个表)。我正在阅读它,但无处可去。这里非常差的互联网也意味着没有视频访问。总之,导航栏不显示的原因可能有一些简单的原因吗? – RGriffiths 2013-05-13 17:04:21

+0

我现在已经注意到,只要我将表格与上一个视图中的按钮连接起来,使用segue,表格视图上的导航栏就会消失! – RGriffiths 2013-05-13 17:08:02

+0

真的很感谢你的帮助。见下文。 – RGriffiths 2013-05-13 17:30:46