LoginSignup
42
36

More than 5 years have passed since last update.

[Swift] UIViewの自作subclassの初期化

Last updated at Posted at 2014-10-20

Swift 1.2版を投稿しました!
[Swift 1.2] UIViewの自作subclassの初期化


初投稿なので読みづらいです。

UIViewのサブクラスを自作するときの初期化で少しはまってしまったので残します。

自作のviewクラスにとりあえず以下のメソッドを入れておけば上手く動きました。

required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}

override init(frame: CGRect) {
    super.init(frame: CGRectMake(0, 0, 0, 0))
}

override init() {
    super.init()
}

どれかが欠けるとエラーになるのでとりあえずこの3つは入れて置けば大丈夫だと思います。コードのみの生成や、xibに配置したviewをcustom classにして生成した場合などで異なります。

required init(coder aDecoder: NSCoder) {}

xibやstoryboardにviewを配置した時、

override init() {}

override init(frame: CGRect) {}

コードで生成した時に呼ばれるみたいです。
ちなみにどちらでも呼ばれるメソッドは

override func drawRect(rect: CGRect) {
    super.drawRect(rect)
}

なので、ここに初期化したい処理を書くと良いかと思います。drawRectはcolorやtextを変えた時に呼ばれます。

※追記
xib (storyboard) に配置したviewをcustom classにした場合も、
override init()とrequired init(coder aDecoder: NSCoder) を入れないと親のプロパティにアクセス出来なかったので、
やっぱりこの3つを入れるのが無難ですね。

※追記2
この方法でinit(frame:)にrectを引数にして初期化するとviewの透過が正常に動きませんでした。
objective-cだと同じような方法で問題なかったので、足りない記述があるかと思います。
失礼しました。調べて確認が出来ましたら追記いたします。

42
36
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
42
36