24

我正在编写一个基于导航的 iPhone 应用程序,我希望 UIToolBar 停靠在我的屏幕底部,UITableView 在工具栏和导航栏之间滚动。

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

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

4

5 回答 5

48

从 OS 3.0 开始,导航控制器内置了一个工具栏。要使其显示:

[self.navigationController setToolbarHidden:NO];

通过实施:

- (void)setToolbarItems:(NSArray *)toolbarItems animated:(BOOL)animated

在您的视图控制器中,您可以配置工具栏的项目。

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

(纠正错字)

于 2009-07-02T08:54:26.903 回答
8

科里弗洛伊德大部分是正确的,除了

[self.navigationController setToolBarHidden:NO];

应该

[self.navigationController setToolbarHidden:NO];

即“setToolbarHidden”中的“b”必须为小写。此外, iPhone OS Reference中列出的方法名称实际上是

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

虽然似乎省略animated参数也有效。

于 2009-12-13T09:23:12.550 回答
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];
于 2012-05-16T23:24:16.493 回答
2

您需要做的就是实现所需的表视图功能级别所需的 UITableViewDelegate 和 UITableViewDatasource 方法。这些方法可以在任何类中,尽管所述类应符合相关协议。应在 UITableView 实例上设置委托和数据源 - 以编程方式或使用 Interface Builder。根据文档,您失去一些功能 - 请参阅概述部分

就我个人而言,我发现许多开发人员似乎痴迷于在单个整体视图控制器类中提供所有这些功能,并且因为他们的视图中有一个表视图,所以必须使用 UITableViewController 的子类。但是,我喜欢考虑单一职责原则,并且当复杂性不简单时,我经常会将数据源和委托分解为单独的类。代码也不会绑定到特定的 UIViewController 实现。

在我有单独的数据源/委托类的情况下,我经常使用 Interface Builder 而不是在代码中构造并将它们连接到表视图。这种方法(至少对我而言)本着依赖注入的精神,节省了编写一些样板代码,并提供了一定程度的解耦

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

于 2009-07-02T05:25:35.430 回答
0

试试这个:

self.navigationController.toolbarHidden = NO;

希望它可以帮助你。

于 2011-10-12T13:11:16.403 回答