代码之家  ›  专栏  ›  技术社区  ›  Frank Schmitt

向UITableView添加工具栏的正确方法是什么?

  •  25
  • Frank Schmitt  · 技术社区  · 15 年前

    我正在编写一个基于导航的iPhone应用程序,我想在屏幕底部放置一个uitoolbar,在工具栏和导航栏之间滚动一个uitableview。

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

    或者在标准uiviewcontroller中嵌套uitableviewcontroller更好?

    5 回复  |  直到 12 年前
        1
  •  49
  •   Corey Floyd    14 年前

    从OS3.0开始,导航控制器内置工具栏。要使其出现:

    [self.navigationController setToolbarHidden:NO];
    

    通过暗示:

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

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

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

    (更正错误)

        2
  •  9
  •   Vic    15 年前

    科里·弗洛伊德基本上是正确的,除了

    [self.navigationController setToolBarHidden:NO];
    

    应该是

    [self.navigationController setToolbarHidden:NO];
    

    也就是说,“settoolbarhidden”中的“b”必须是小写。另外,方法名称列在 iPhone OS Reference 实际上是

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

    虽然似乎忽略了 animated 参数也起作用。

        3
  •  7
  •   Nikhil Dinesh    12 年前
    //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];
    
        4
  •  2
  •   teabot    15 年前

    您所需要做的就是实现所需的表视图功能级别所需的UITableViewDelegate和UITableViewDataSource方法。这些方法可以在任何类中,但所述类应符合相关协议。委托和数据源应在UITableView实例上设置-通过编程或使用接口生成器。根据你的文件 失去一些功能-请参阅 overview section .

    就我个人而言,我发现许多开发人员似乎都热衷于在单个单片视图控制器类中提供所有这些功能,并且因为他们的视图中有一个表视图,所以必须使用UITableViewController的子类。但是,我喜欢考虑 Single Responsibility Principle 当复杂性不是简单的时候,通常会将数据源和委托分解成单独的类。然后,代码也不会绑定到特定的uiviewController实现。

    在我有单独的数据源/委托类的情况下,我经常使用接口生成器而不是代码来构造它们并将它们连接到表视图。这种方法(至少对我来说)是本着 Dependency Injection 并且节省了编写一些锅炉板代码,并提供了 decoupling .

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

        5
  •  0
  •   Parth Bhatt    12 年前

    试试这个:

    self.navigationController.toolbarHidden = NO;
    

    希望对你有帮助。