IB Designables 在使用自定义 class 时发出奇怪的警告

IB Designables gives strange warning when using a custom class

我正在尝试使用自定义 swift class 子class 我的 Storyboard 上的 UIButton,它应该将按钮显示为自定义 Hamburger Button。

我收到此警告,但没有看到在 Interface Builder 中呈现的 Hamburger 按钮,尽管它会间歇性地工作。

自定义的class叫NTHamburgerButton,不知道为什么在class名字前面出现了字符上的字符串。

IB Designables: Using class UIButton for object with custom class because the class _TtC6CProjectName17NTHamburgerButton does not exist.

我也遇到了同样的问题,我从另一个问题中找到了答案: enter link description here

我只是刷新所有视图

对我有用。希望对你也有帮助。

这个问题好像又引起了一些关注,所以我会更新一下。

这个问题存在于 Obj-C 和 Swift 混合项目中。所以有问题的 Class 是 Swift Class.

使 Swift classes 在 Obj-C 中可用时,您可以使用以下语法

@objc(NTHamburgerButton) public class NTHamburgerButton : UIButton {}

否则在 Xcode 创建的 {Project-Name}-Swift.h 文件中,您会看到它生成了这些唯一的 class 名称,就像问题中的那样。

这里唯一真正的问题是 NTHamburgerButton.swift 文件没有包含在我当时查看的产品中,但如果我切换目标,它工作正常。因此间歇性问题。

对我来说,Codermonk 和 specialvict 的解决方案都是必要的,但还不够。

我还必须在 Interface Builder 中打开 Inherit From Target

这对我有用。

我在 Xcode 11 中遇到了这个错误,即使在应用了其他给出的解决方案之后也是如此。

在我的例子中,我有自己的 @IBDesignable class 驻留在主模块中(因此,不是来自 CocoaPod 或其他外部模块)。然而,即使在为我的视图 class 指定 objc(ClassName) 时,自动生成的 class 名称仍在构建时由 Interface Builder 使用。

最后,我在IB中删除了模块名称和模块继承,从而消除了错误并获得了视图预览渲染:

所以,对我来说完整的解决方案是:

  1. 为 Swift class
  2. 声明一个 Objective-C class 名称
  3. 如上所示在 Interface Builder 中配置 class

自 Xcode 11 起,Swift 似乎都需要两者。值得注意的是,尽管删除了模块引用,但我在运行时的视图没有任何问题。我也不确定这个解决方案如何查找从其他模块导入的视图。

我在 Xcode 12.1 时开始遇到这种情况。到目前为止,只需 un-checking 然后 re-checking Interface Builder 中的“Inherit Module From Target”似乎就解决了这个问题。