如何在界面构建器中使用框架中的 UIView 子类

Posted

技术标签:

【中文标题】如何在界面构建器中使用框架中的 UIView 子类【英文标题】:How to use a UIView subclass from a framework within interface builder 【发布时间】:2019-05-17 17:11:20 【问题描述】:

问题

我已经开始将我的代码分成模块,所以我做了一个名为GEView的框架。

问题出在界面生成器中。 UIView 使用框架进行子类化:

但是,我看不到任何 @IBInspectable 属性。当这个类在项目中而不是分离到一个框架中时,它确实有效。如何查看这些以便更改属性?

框架类

/// UIView subclass to allow creating corners, shadows, and borders in storyboards.
@IBDesignable
open class GEView: UIView 

    /* ... */


    // MARK: - Rounded corners
    @IBInspectable
    public var cornerRadius: CGFloat = 0 
        didSet 
            layer.cornerRadius = self.cornerRadius
            layer.masksToBounds = true
        
    


    /* ... */

框架实现

我什至在包含此视图的界面构建器中的该视图控制器的类中添加了import GEView,但仍然无法正常工作。

这是我第一次在项目中使用我自己的框架,所以我可能会错误地创建或导入它。这是项目层次结构:

半工作法

我设法让Interface Builder 至少能够识别GEView 类。我在我的项目中尝试了这段代码:

@IBDesignable
class IBGEView: GEView 

    @IBInspectable
    var _cornerRadius: CGFloat  return cornerRadius 

然后我将在Interface Builder 中使用IBGEView 进行子类化。这绝不是我一直在寻找的解决方案,所以我仍在寻找。 这不是解决方案。

【问题讨论】:

到目前为止 - 我不再在框架中使用它,直到有一个可行的答案。 【参考方案1】:

我认为您还需要指定模块。通常,它是框架的名称。从目标中取消选中模块并在那里写入框架的名称

【讨论】:

仍然不起作用 - 而且,GEView 无论如何都不是下拉列表中的选项 如果你在你的类中导入 GEView 并且它正在编译,那么你肯定有一个名为 GEView 的模块。有时 xcode 无法识别它。很确定您必须在此处提及正确的模块名称。 这是我第一次使用框架,所以我在实现它们时可能做错了 仍然没有运气

以上是关于如何在界面构建器中使用框架中的 UIView 子类的主要内容,如果未能解决你的问题,请参考以下文章

IBDesignable UIViewController

XIB 中的 UIView 子类不显示(drawRect:从未调用)

如何从 Xcode 10 和 Swift 4 中的界面构建器中解除模态序列 [重复]

将图像添加到界面构建器中的按钮

使用 AVPlayer 在 UIView 中播放时间流逝

在界面构建器中使用约束