ios - タイトル - uiviewcontroller title




ネストされたカスタムビュークラスを指定する方法 (2)

使用可能なネストされたクラスSuperViewおよびNestedView。

class SuperView : UIImageView {

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

    var text : String = "Super View"
    var nested : NestedView?

}

私は 、UIImageViewのために "カスタムクラス名"という名前のプロパティを設定して、ストーリーボードシーンのインスペクタ内の値を "NestedView"にしたいと思います。 しかし、Interface Builderは "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クラスの名前しか認識しないと思います。 @objcキーワードを使用してInterface Builderに入れ子クラスを見つけることができます。

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

次に、Interface Builderで、そのビューがSVNestedViewクラスであることを指定します。 Objective-Cは名前空間ではないので、ネストされたクラスごとに固有の名前を選択する必要がありますが、少なくともSwift側は適切な名前空間になっています。





nested-class