11

如果您构建自定义 UIView,并将其集成到界面构建器中的父视图/视图控制器中,则表示您的自定义视图的图形元素是不可见的,如果您不指定背景颜色(我没有)。

有没有办法,仅在开发过程中,识别不同的自定义视图?有什么技巧可以区分它们吗?

我能想到的最接近的是在 IB 中设置背景颜色,然后在自定义视图的实现中删除背景。

4

2 回答 2

15

边界矩形

您可能会发现边界矩形很有用。您可以通过转到菜单栏并选择 Editor > Canvas > Show Bounds Rectangles 来打开它们。

这是一个例子。我有一个UICollectionViewCell放在笔尖上的视图(一个子类)。它有一个单行标签、一个两行标签和一个自定义子视图。自定义子视图本身包含一个较小的自定义子视图。这是边界矩形关闭的笔尖:

无边界矩形

这是带有边界矩形的相同笔尖:

带边界矩形

背景颜色覆盖

这是另一种基于设置背景颜色的技术。此技术要求您的部署目标是 iOS 5.0 或更高版本。

如您所述,设置背景颜色以使视图在笔尖中可见:

背景颜色

然后切换到 Identity Inspector 并添加backgroundColor到 User Defined Runtime Attributes 部分。将其设置为您希望视图在运行时具有的背景颜色。例如,如果您希望它在运行时为白色:

用户定义的运行时属性中的 backgroundColor

如果希望背景颜色清晰,可以设置backgroundColor为不透明度为 0 的颜色,也可以将其设置为“Nil”而不是任何颜色:

backgroundColor 设置为 Nil

于 2013-07-02T05:31:17.360 回答
2

在 Interface Builder 中设置背景颜色但在代码中重置它的方法是一种简单但有效的技术。两个改进:

  1. 如果您在单个故事板场景上有多个自定义视图,您可以通过使用IBOutletCollection. 因此,在 Interface Builder 中,为它们提供所有背景颜色,然后将给定场景的所有自定义视图添加到集合中。然后,您可以在单个语句中为所有这些设置背景颜色。因此,例如,如果您在一个场景中有十几个控件,所有控件都集中在一个场景中,IBOutletCollection则命名为viewsCollection

    @property (strong, nonatomic) IBOutletCollection(UIView) NSArray *viewsCollection;
    

    您可以在单个语句中清除所有它们的背景颜色:

    [self.viewsCollection setValue:[UIColor clearColor] forKey:@"backgroundColor"];
    
  2. 您还可以通过在“身份检查器”的“文档”属性中设置“标签”来更轻松地在 Interface Builder 中识别自定义视图:

    标签

    完成此操作后,当您查看主面板左侧的文档大纲时,您会看到标签出现:

    文件大纲

    然后,使用文档大纲可以更轻松地识别场景中的各个视图。你可以像我在这里做的那样使用一个随机标签,或者你可以使用你的自定义视图类的名称,或者其他什么。

于 2013-07-02T04:41:18.593 回答