【问题标题】:Visually modifying a UIToolbar from xcode storyboard从 xcode 故事板可视化修改 UIToolbar
【发布时间】:2012-02-01 05:07:42
【问题描述】:

我正在使用 XCode 4 和故事板我正在创建的应用程序,但是我无法直观地修改 UIToolbar。

我正在尝试修改 UITableViewController 内部的 UIToolbar - 但是我必须将 UIToolbar 放置在正确的层次结构之外,以便能够在视觉上对其进行修改。我试过把它放在视图控制器区域,但这并没有让它显示出来。

在某一时刻,我能够让它出现在下面,因为它是自己的对象,但是我无法重新创建它。

一旦我能够让它看起来像这样

【问题讨论】:

    标签: ios xcode xcode4 ios5


    【解决方案1】:

    您的UITableViewController 位于UINavigationController 中,该UINavigationController 已经有自己的UIToolbar——您无需将新的UIToolbar 拖到视图层次结构中。 Interface Builder 可以在 Inspector 面板的“Simulated Metrics”下为您模拟工具栏。

    一旦模拟工具栏可见,只需将UIBarButtonItems 拖入其中即可。如果您需要比按钮或间隔更复杂的东西,请使用带有自定义视图的自定义项。

    如果您需要工具栏项是动态的,您可以通过IBOutlets 维护引用,而不必将它们显示在您的视图中。然后设置您的UITableViewControllertoolbarItems 属性或在运行时调用-setToolbarItems:animated: 以显示相应的项目。

    请参阅 Apple 的 UINavigationController Class Reference: Displaying a Toolbar

    【讨论】:

    • 谢谢这是问题所在,我之前无法将项目拖到模拟工具栏上,但这是由于我在检测到崩溃后维护了一个正在运行的 xcode 会话。只需将条形按钮项拖动到模拟工具栏即可获得预期结果。
    • 虽然同时,我想知道我是如何让工具栏在底部显示为它自己的实体两次。
    • 当视图处于编辑模式时,您将如何直观地布局项目?我必须在单独的笔尖或通过代码创建它吗?我真的很想使用情节提要...
    • UIToolbar 没有固有的“编辑”状态,IB 也没有提供直观的便捷方式。相反,我将使用两个单独的IBOutletCollection 属性来保存每个状态的项目并实现-[UIViewController setEditing:animated:](确保调用super)以在运行时显示适当的工具栏项目。在 IB 中,如果您不希望它们成为初始视图的一部分,您可以将编辑项目存放在灰色的“场景”托盘中。
    【解决方案2】:

    为了回答您的问题,可视化编辑器简化了大多数控件、视图层次结构和委托模式的设置,但开发人员仍需确保他们签出。 UITableViewController 的实现对其视图层次结构做出了某些假设和断言,Xcode 不会通过可视化编辑器强制执行这些假设和断言。鉴于您想要的视图层次结构不受支持,我不得不假设编辑器的行为未定义或不相关。有关解决方法,请参阅 Maxner 的建议。

    【讨论】:

      【解决方案3】:

      UITableViewControllers 只允许一个视图对象,当然是 UITableView。 UITableViews 不配合子视图,它们通常将所有内容推送到页脚或页眉中。这样的事情是不可能的:

      -TableController
          -Table
              -Subview
              -Another subview
      

      UITableViewControllers 被简化为:

      -TableViewController
          -Table
      

      所以你需要使用 UIViewController 并在其中声明一个 UITableView。这是您应该使用的层次结构:

      - ViewController <Table's Delegate & Data Source>
          - View           
              -Table
              - Your UIToolbar
      

      在您的 ViewController.h 中声明 IBOutlet UITableView 并将 Data Source 和 Delegate 连接到 ViewController。然后只需将 UITableView 实现添加到您的 .m 文件中即可。

      【讨论】:

      • 我在运行时没有问题,它只是在故事板中。我无法直观地修改工具栏,但是在运行时它会正确显示。
      • 这是一个有趣的想法,但我不应该这样做。我还能够让工具栏意外地单独显示一次。所以我确定有办法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-20
      • 1970-01-01
      • 2012-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多