首页 > 解决方案 > 如何防止 Interface Builder 将项目添加到自定义视图?

问题描述

更新:为清楚起见进行了编辑。

这不是一个阻碍,但它很烦人,我想弄清楚如何解决它。

我有一个自定义 UIView。准确地说,一个 UIScrollView,它在运行时以编程方式填充了一堆 UIView。它并不意味着在 Interface Builder (IB) 中嵌入任何东西。

任何 UIView 发生的情况是,当您将另一个元素拖到它上面时,UIView 变为“可放置”,并允许将另一个元素放入其中。

有一些原生的 Apple 元素不会让您将内容放入其中,例如 UIPickerView。

是否有一个标志或我可以设置的东西,这样它就不允许 IB 向它添加任何东西?

就像我说的,不是炫耀。如果添加了东西,它会在程序化填充发生之前被销毁,但它似乎“更简洁”以明确它不是“可丢弃的”。

更新:在下面的屏幕截图中,登录选择器视图是标准的 UIPickerView,显示结果滚动器视图是我的自定义滚动器。如果我将某些内容从库中拖出,并尝试将其放到 Picker 视图中,则不会发生任何事情。但是,我可以将它放到我的显示结果视图中。

我想要的是能够将我的显示结果视图声明为“禁飞区”,因此它不再可放置。

我希望这能说清楚。

不能放在 PickerView 上

无法拖放到 PickerView

在此处输入图像描述

可以放在我的自定义视图上

标签: swiftuiviewinterface-builder

解决方案


我并不是说这是一个很好的解决方案,但如果您使用的是故事板(而不是 xib),那么它似乎可以工作......</p>

  1. 在情节提要中,不要将滚动视图拖出库,而是拖出容器视图。
  2. IB 自动创建一个新的故事板场景,通过嵌入转场连接到新的容器视图。删除新创建的场景。
  3. 将容器视图的自定义类设置为UIScrollView.

IB 不允许您将任何子视图添加到容器视图。

请注意,IB 也不会UIScrollView在属性检查器中向您显示任何特定属性,因此如果您需要自定义这个时髦的滚动视图,您必须以编程方式进行。

该库不提供 xib 中的容器视图,因此需要情节提要。


推荐阅读