如何从同一个故事板访问Objective-C和Swift类?

时间:2014-06-03 16:45:13

标签: ios objective-c uibutton swift

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

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

Unknown class RoundButton in Interface Builder file.

4 个答案:

答案 0 :(得分:4)

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

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

版本信息差异: enter image description here

UIButton自定义类定义diff: enter image description here

在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并不是一个问题。

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

答案 3 :(得分:0)

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

如果你正在使用pre-Xcode 6 Storyboard版本,那么仅仅通过强制更新“自定义类”来手动更新Interface Builder抱怨的子类可能会有所帮助。 ' Identity Inspector'。

中的字段