pkino
@pkino (Ikuhide Kinoshita)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

カスタムView(カスタムコンポーネント)を作る際の、カスタムClassのコードとxibの正しい紐付け方について

Q&A

Closed

解決したいこと

こちらのxibからカスタムViewを作る際の方法を参考にしているのですが、一体何が正解なのでしょうか??

File’s OwnerかCustom classか

File’s Ownerに指定する方法であれば、コード上でもIB上でもUIViewと変わらず自然に扱うことができます

  • 記事的には、上記の通りFile’s Ownerを使うのが汎用性があっていいようですが、別にコードから扱わないならいいのか?と思ったり。
  • また、XCodeでカスタムViewを作る際にalso create xib fileを選択すると、File’s ownerではなくCustom classが指定されたファイルが生成されます。

カスタムViewをxibを用いて作る際の紐付け方について、正しい方法というのはあるのでしょうか??

0

1Answer

用途によります。両方同時に使うこともあります。

File’s Owner は、コードで nib.instantiate(withOwner: owner, options: nil) を呼ぶときに渡す owner が何のクラスのオブジェクトであるかをあらかじめ Interface Builder に伝えるヒントです。これを指定することで、 Interface Builder は owner に定義されているプロパティやメソッドを知り、バインドの対象として表示することができます。

(ヒントでしかないので実行時に異なるクラスの onwer を渡すこともできてしまいますが、実際の owner に存在しないプロパティを xib から参照していればクラッシュします。)

File’s Owner は view であるとも限りません。 たとえば UIViewController だったり、 xib をあらかじめロードして保持するだけのマネージャクラスなどであってもいいわけです。また親クラスであってもよく、実際の owner がカスタムビューでも File’s Owner に UIView と指定することができます。

一方で view のカスタムクラスはその view 自体のクラスを表します。これはヒントではなく、 xib をロードするときにその名前のクラスをインスタンス化します。

xib から onwer を参照したいなら File’s Owner を設定し、 view の振る舞いを変える(UIView のメソッドをオーバーライドするなど)ならカスタムクラスを設定してください。両方必要なら両方設定し、どちらか片方でカスタマイズが実現できるなら好きな方を使ってください。

1Like

Comments

  1. @pkino

    Questioner

    ご回答くださり、ありがとうございます!
    とてもよく理解できました。

    別のクラスなどとのつながりを作れるFile's Ownerと、
    インスタンス化するクラスの挙動を定義するカスタムクラス。
    ということで、理解しました。
    ありがとうございます!

Your answer might help someone💌