【问题标题】:What's the right way to add a ToolBar to a UITableView?将 ToolBar 添加到 UITableView 的正确方法是什么?
【发布时间】:2010-11-07 12:58:08
【问题描述】:

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

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

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

【问题讨论】:

    标签: iphone uitableview toolbar


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      [self.navigationController setToolbarHidden:NO];
      

      通过实施:

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

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

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

      (纠正错字)

      【讨论】:

        【解决方案3】:

        Corey Floyd 基本上是正确的,除了

        [self.navigationController setToolBarHidden:NO];
        

        应该是

        [self.navigationController setToolbarHidden:NO];
        

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

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

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

        【讨论】:

          【解决方案4】:

          试试这个:

          self.navigationController.toolbarHidden = NO;
          

          希望对你有帮助。

          【讨论】:

            【解决方案5】:
            //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];
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2016-11-09
              • 2023-04-09
              • 1970-01-01
              • 1970-01-01
              • 2014-02-17
              • 2014-12-08
              • 1970-01-01
              相关资源
              最近更新 更多