【问题标题】:How to access both Objective-C and Swift classes from same storyboard?如何从同一个故事板访问 Objective-C 和 Swift 类?
【发布时间】:2014-06-03 16:45:13
【问题描述】:

我已经在 Swift 中实现了一个 UIButton 派生类(RoundButton),其余的仍在 Objective-C 中。如何在同一个 Storyboard 中同时访问基于 Objective-C 的类和基于 Swift 的类?

您可以在 Storyboard 的 UIButton Custom Class - Class 字段中键入 RoundButton,但 iOS 会提供以下警告运行时:

Unknown class RoundButton in Interface Builder file.

【问题讨论】:

    标签: ios objective-c uibutton swift


    【解决方案1】:

    Xcode 6.0 (6A215l) 似乎需要将 Storyboard 文件升级到更新版本才能访问 Swift 类。

    如果您将 Objective-C 类替换为同名的 Swift 类,则需要打开 Storyboard,编辑自定义类的名称(如删除最后一个字母),保存 Storyboard,然后重命名该类背部。这将强制 Storyboard 文件升级到更新的版本,并且新的 Xcode 正确地编写自定义类键,如下所示:

    版本信息差异:

    UIButton 自定义类定义差异:

    在 Storyboard 文件中进行这些更改后,警告似乎消失了,并且使用了正确的自定义类。

    【讨论】:

    • 我想补充一点,我遇到了同样的问题。重命名课程也解决了这个问题。在我的例子中,我用 Swift 重写了一个有效的 Objective-C 类。这个类被称为BTZGenres.m。我创建的新类名为 Genres.swift(注意我删除了“BTZ”)。在 Storyboard 场景中,我更改了 UIViewController 类以使用新的基于 swift 的类。我还指出我使用的是更新版本的 Xcode (6.1.1)。如果这是 Xcode 错误,那么它在 6.1.1 中还没有修复。这个项目最初是在 Xcode 5 中构建的。
    • 这似乎是 Xcode 中的一个错误。重命名对于情节提要重新加载类至关重要。请注意,故事板中的 Swift 类具有额外的模块信息。在您的情况下,您在项目的目标中定义了一个名为“fantter”的模块。
    【解决方案2】:

    我想添加另外两个对我有用的解决方案,在两个不同的情况下,我收到了相同的消息 (Unknown class MySwiftClass in Interface Builder file.)

    在第一种情况下,我有一个 UIViewController 的 Swift 子类。好吧,我以为我想在 init 中设置一些东西,所以我实现了:

    override func initWithNibName:bundle:
    

    因为那是指定的初始化器...我在方法中做任何事情,它就在适当的位置。然而在运行时,直到我删除了该方法,我的类才被看到。

    在另一种情况下,我有一个不同的 Swift UIViewController 子类,在运行时也没有找到。最终解决方法是重命名 Swift 类(我在名称中添加了“2”)。我也在情节提要中更改了课程,突然它起作用了……这是在尝试从情节提要中删除名称并重新添加之后,但没有用。

    这两种情况可能确实是已接受答案的其他示例 - 但在我的情况下,仅更改情节提要中的名称是不够的,我必须以某种方式更改 swift 类本身。

    【讨论】:

      【解决方案3】:

      你应该确保你已经添加了 Objective C 桥接头。在同一个故事板中同时使用 Objective C 和 Swift 不是问题。

      http://i58.tinypic.com/33aqbyu.png

      【讨论】:

        【解决方案4】:

        Xcode 6.0 (6A254o) / iOS 8 Beta 3 中的 Storyboard 文件本身似乎确实存在问题。

        如果您使用的是 Xcode 6 之前的 Storyboard 版本,只需通过强制更新“身份检查器”中的“自定义类”字段来手动更新 Interface Builder 抱怨的子类可能会有所帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-06-10
          • 2020-10-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多