gpt4 book ai didi

ios - 使用 Storyboard 的自定义 View

转载 作者:IT王子 更新时间:2023-10-29 07:29:32 25 4
gpt4 key购买 nike

在复杂的屏幕( View Controller )中,我过去常常将整个东西分成更小的部分(我称它们为小部件)。这些小部件基本上由一个 MyWidget.h 和一个 MyWidget.m 文件以及一个 MyWidget.xib 文件组成,其中根元素是UIView MyWidget 类是 UIView 的文件所有者。在这个小部件的初始化中,我做了一个 loadNibNamed

然后在我的 View Controller 中执行 [[MyWidget alloc] init],我将其作为 subview 添加到 View 的 Controller 主视图。到目前为止,这非常有效。

我现在想知道如何对 Storyboard做同样的事情,因为我无法真正开始将 UIView 拖到某个地方,我总是必须从 UIViewController,我不想这样做。

如果无法使用 Storyboard 执行此操作,我是否可以简单地使用旧方法,通过将 Storyboard 用于我的主屏幕和 segues,并使用单独的 .xib 文件来定义自定义 View ?

最佳答案

将小部件/ View 放在一个单独的 .xib 文件中是可行的,并且是合适的,尤其是当您可能想从多个 View Controller 引用同一 View 时。

但是,有时您确实希望在同一个 Storyboard中看到额外的 View /小部件,这是可能的。方法如下:

  1. 在 IB 中选择您的 View Controller (单击 View 下方的黑条),然后从对象库中将一个 UIView 拖到黑条中:

    enter image description here

  2. 当一个 View 位于黑色条中时,它会像 IB 中的任何其他 View 一样被实例化,只是不会添加到您的 View 层次结构中,直到您在代码中这样做。如有必要,更改 View 的类以匹配您自己的子类:

    enter image description here

  3. 您可以像连接任何其他 View 一样将它连接到您的 View Controller :enter image description here

  4. 添加的 View 显示在您的文档大纲中,您也可以在那里连接操作和引用:

    enter image description here


现在,剩下的问题是,无论您尝试单击或双击多少次,您实际上都看不到 View ,这会破坏将它放在同一个 Storyboard 中的全部目的。幸运的是,我知道有两种解决方法。

第一个解决方法是将 View 从黑条拖回 View Controller 的 View ,编辑它,然后在完成后将其拖回黑条。这很麻烦但可靠。

另一种解决方法比较挑剔,但我更喜欢它,因为它可以让我同时看到我的所有 View :

  1. 将对象库中的 UITableView 拖到新添加的 View 中。

  2. 然后将一个 UITableViewCell 拖到那个 UITableView 中。

    enter image description here

  3. 执行此操作后,您的 View 会神奇地从旁边弹出,但您有一个不需要的 UITableView。您可以将它的大小调整为 0x0,或者您可以删除它并且您的 UIView 将(通常)仍然可见。

  4. 偶尔,辅助 View 会在 IB 中再次隐藏。如果您删除了 UITableView,您可以重复上述步骤,或者如果 UITableView 仍在层次结构中,您只需单击 UITableViewCell, View 将​​再次出现。

第二种方法适用于 UIViews 但不适用于 UIToolbars 并且不可能用于 UIButtons,所以当您需要包含许多不同的 subview 时,我发现的最干净的解决方案是将一个辅助 UIView 附加到您的 View Controller 一个永远不会显示的容器,将所有辅助 View 放在那里,并使用 UITableViewCell 技巧使所有内容可见。我将虚拟 UITableView 的大小调整为 0x0 以使其不可见。这是所有内容的屏幕截图:

enter image description here

关于ios - 使用 Storyboard 的自定义 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9498010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com