Ios 如何指定嵌套的自定义视图类?

Ios 如何指定嵌套的自定义视图类?,ios,xcode,swift,storyboard,nested-class,Ios,Xcode,Swift,Storyboard,Nested Class,可用 嵌套类SuperView和NestedView class SuperView:UIImageView{ 类NestedView:UIImageView{ var text:String=“嵌套视图” } var text:String=“超级视图” 变量嵌套:嵌套视图? } 我希望为UIImageView设置名为“Custom Class Name”的属性,以在情节提要场景的检查器中设置值“NestedView”。但是接口生成器找不到“NestedView”类 在Swift中,内部类的

可用 嵌套类SuperView和NestedView

class SuperView:UIImageView{
类NestedView:UIImageView{
var text:String=“嵌套视图”
}
var text:String=“超级视图”
变量嵌套:嵌套视图?
}
我希望为UIImageView设置名为“Custom Class Name”的属性,以在情节提要场景的检查器中设置值“NestedView”。但是接口生成器找不到“NestedView”类


在Swift中,内部类的实例独立于外部类的任何实例。这就好像Swift中的所有内部类都是使用Java的static声明的一样

我认为这种课堂设计不符合你的要求。您需要做的是,您需要在视图之外创建一个新类,并创建某种组合。这肯定会对你有好处的

下面是对代码的一些修改:

class SuperView : UIImageView {
    var text : String = "Super View"
    var nested : NestedView = NestedView()
}

class NestedView : UIImageView {
    var text : String = "Nested View"
}

此时,我认为Interface Builder只能识别Objective-C类的名称。您仍然可以让Interface Builder查找带有@objc关键字的嵌套类:

class SuperView: UIView {
  @objc(SVNestedView) class NestedView: UIImageView {
  }
}

然后,在Interface Builder中,指定th视图为SVNestedView类。由于Objective-C没有名称空间,您仍然需要为每个嵌套类选择唯一的名称,但至少Swift端有正确的名称空间。

我认为目前为止,在像
SuperView.NestedView这样的情节提要中不可能指定内部类。因此,我从内部类扩展了一个类,然后在故事板中指定它,如
SuperView\u 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?

}
此视图可以从ViewController中称为
SuperView.NestedView
,因为
SuperView\u NestedView
是从
SuperView.NestedView
扩展而来的

class TheViewController: UIViewController {
    @IBOutlet var nestedView: SuperView.NestedView!


根据嵌套类型在其他地方的工作方式,我的期望是您可以将该类分配给
SuperView.NestedView
,但interface builder不允许这样做。我认为这将是一个伟大的功能名称空间小,专门构建的子视图。谢谢,这是如此方便!这似乎不适用于Xcode 8.1中的Swift 3。仍然无法在iBunforty中查看
SVNestedView
,似乎Xcode不支持为嵌套类显示已连接的
IBOutlets