我在Swift中实现了一个UIButton派生类(RoundButton),其余的仍然在Objective-C中。如何在同一个故事板中访问基于Objective-C的类和基于Swift的类?
您可以在故事板中的UIButton RoundButton
字段中键入Custom Class - Class
,但iOS会提供以下警告运行时:
Unknown class RoundButton in Interface Builder file.
答案 0 :(得分:4)
似乎Xcode 6.0(6A215l)需要将Storyboard文件升级到更新版本才能访问Swift类。
如果用具有相同名称的Swift类替换Objective-C类,则需要打开Storyboard,编辑自定义类的名称(如删除最后一个字母),保存Storyboard,然后重命名该类背部。这将强制将Storyboard文件升级到更新版本,并使用新的Xcode正确编写自定义类密钥,如下所示:
版本信息差异:
UIButton自定义类定义diff:
在Storyboard文件中进行这些更改后,警告似乎消失,并且使用了正确的自定义类。
答案 1 :(得分:1)
我想添加另外两个对我有用的解决方案,在两个不同的情况下,我收到相同的消息(Unknown class MySwiftClass in Interface Builder file.
)
在第一种情况下,我有一个UIViewController的Swift子类。好吧,我以为我想在init中设置一些东西,所以我实现了:
override func initWithNibName:bundle:
因为那是指定的初始化程序......我在方法中做了所有事情,它就在那里。然而在运行时,直到我删除该方法才能看到我的课程。
另一种情况我有一个不同的Swift UIViewController
子类,在运行时也没有找到。最后解决方法是重命名Swift类(我在名称中添加了" 2")。我在故事板中也更改了类,突然它起作用了...这是在尝试从故事板中删除名称并重新添加之后,这不起作用。
这两种情况都可能是接受答案的其他例子 - 但在我的情况下,只更改故事板中的名称是不够的,我不得不以某种方式改变swift类本身。
答案 2 :(得分:0)
您应确保已添加Objective C桥接标头。在同一个故事板中使用Objective C和Swift并不是一个问题。
答案 3 :(得分:0)
在Xcode 6.0(6A254o)/ iOS 8 Beta 3中,Storyboard文件本身确实存在问题。
如果你正在使用pre-Xcode 6 Storyboard版本,那么仅仅通过强制更新“自定义类”来手动更新Interface Builder抱怨的子类可能会有所帮助。 ' Identity Inspector'。
中的字段