可用 嵌套类SuperView和NestedView。
class SuperView : UIImageView {
class NestedView : UIImageView {
var text : String = "Nested View"
}
var text : String = "Super View"
var nested : NestedView?
}
我想在故事板场景的检查器中为UIImageView设置名为“Custom Class Name”的属性,以赋值“NestedView”。但是Interface Builder找不到“NestedView”类。
答案 0 :(得分:14)
目前,我认为Interface Builder只识别Objective-C类的名称。您仍然可以使Interface Builder找到带有@objc关键字的嵌套类:
class SuperView: UIView {
@objc(SVNestedView) class NestedView: UIImageView {
}
}
然后,在Interface Builder中,指定该视图是SVNestedView类。由于Objective-C没有命名空间,你仍然需要为每个嵌套类选择唯一的名称,但至少Swift方面是正确的命名空间。
答案 1 :(得分:0)
在Swift中,内部类的实例独立于外部类的任何实例。就好像Swift中的所有内部类都是使用Java的静态声明的。
我不认为这种类设计符合您的要求。您需要做的是,您需要在视图之外创建一个新的类,并创建某种组合。这肯定会为你效劳。
以下是对您的代码的一些修改:
class SuperView : UIImageView {
var text : String = "Super View"
var nested : NestedView = NestedView()
}
class NestedView : UIImageView {
var text : String = "Nested View"
}
答案 2 :(得分:0)
到目前为止,我认为无法在类似SuperView.NestedView
的情节提要中指定内部类。因此,我从内部类扩展了一个类,然后在类似SuperView_NestedView
的情节提要中指定了它。这个对我有用。
final class SuperView_NestedView: SuperView.NestedView {} // Specifies this class in the storyboard
class SuperView : UIImageView {
class NestedView : UIImageView {
var text : String = "Nested View"
}
var text : String = "Super View"
var nested : NestedView?
}
由于SuperView.NestedView
是从SuperView_NestedView
扩展而来的,因此从ViewController可以将此视图称为SuperView.NestedView
。
class TheViewController: UIViewController {
@IBOutlet var nestedView: SuperView.NestedView!