2009-07-02 121 views
25

我正在编写一个基于导航的iPhone应用程序,我想让UIToolBar停靠在我的屏幕底部,UITableView在工具栏和导航栏之间滚动。将工具栏添加到UITableView的正确方法是什么?

我见过几个论坛,有人建议视图控制器处理这个视图应该是一个标准的UIViewController而不是UITableViewController。除了所有标准的UIViewController覆盖之外,视图控制器必须实现UITableView委托和数据源方法。我需要在这个视图控制器子类中重新创建什么(如果有的话)内置功能,而不是像前面提到的协议那样使它像UITableViewController那样工作?通过走这条路我有什么损失吗?

或者将UITableViewController嵌套到标准UIViewController中会更好吗?

回答

49

随着OS 3.0导航控制器内置了一个工具栏,使其显示:

[self.navigationController setToolbarHidden:NO]; 

通过implmenting:

- (void)setToolbarItems:(NSArray *)toolbarItems animated:(BOOL)animated 
在您的视图控制器

,您可以配置项目的工具栏。

因此,您不必再担心工具栏在层次结构中的位置。

(校正错字)

2

您只需实现所需的表视图功能级别所需的UITableViewDelegate和UITableViewDatasource方法即可。尽管所述类应符合相关协议,但这些方法可以在任何类中。委托和数据源应该在UITableView实例上进行设置 - 无论是编程方式还是使用Interface Builder。根据文档你失去一些功能 - 请参阅overview section

个人而言,我发现许多开发人员似乎都着迷于在单个单片视图控制器类中提供所有这些功能,并且因为他们在视图中有一个表视图,所以必须使用UITableViewController的子类。但是,我喜欢考虑Single Responsibility Principle,并且在复杂度不是简单的情况下,经常会将数据源和委托分解为单独的类。该代码也没有绑定到特定的UIViewController实现。

在我有单独的数据源/委托类的情况下,我经常使用Interface Builder而不是代码将它们连接到表视图。这种方法(至少对我而言)符合Dependency Injection的精神,并省去编写一些锅炉代码,并提供某种程度的decoupling

这些选择当然会受到您尝试实现的功能复杂性的影响 - 对于简单实现,我可能会发现自己使用UITableViewController。

9

科里弗洛伊德大多是正确的,所不同的是

[self.navigationController setToolBarHidden:NO]; 

应该是

[self.navigationController setToolbarHidden:NO]; 

即, “B” 中的 “setToolbarHidden” 必须是小写。此外,在iPhone OS Reference上市的方法名称实际上是

- (void)setToolbarHidden:(BOOL)hidden animated:(BOOL)animated 

虽然它似乎忽略animated参数也可以。

+0

哎呀,纠正。 – 2010-06-17 05:00:30

0

试试这个:

self.navigationController.toolbarHidden = NO; 

希望它可以帮助你。

7
//Tool bar 
[self.navigationController setToolbarHidden:NO]; 

UIBarButtonItem *buttonItem = [[ UIBarButtonItem alloc ] initWithTitle: @"Select All" 
               style: UIBarButtonItemStyleBordered 
               target: self 
               action: @selector(selectAll:) ]; 
UIBarButtonItem *buttonNext = [[UIBarButtonItem alloc]initWithTitle:@"Next" style:UIBarButtonItemStyleBordered target:self action:@selector(goNext:)]; 
self.toolbarItems = [ NSArray arrayWithObjects: buttonItem, buttonNext, nil ]; 

[ buttonItem release ]; 
[buttonNext release]; 
相关问题