init(frame:), init(coder:), awakeFromNib, prepareForInterfaceBuilder が呼ばれる条件をまとめてみた

公開日: : 最終更新日:2020/07/09 iOSアプリ開発

記事内に広告を含む場合があります。記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。

カスタムViewを作った際に呼ばれる初期化系メソッドの条件や順番について調べてみました。

検証に使うコード

今回は以下のコードを検証に使用しました。

import UIKit

@IBDesignable
final class CustomView: UIView {
	override init(frame: CGRect) {
		print(#function)
		super.init(frame: frame)
		backgroundColor = UIColor.red
	}

	required init?(coder aDecoder: NSCoder) {
		print(#function)
		super.init(coder: aDecoder)
		backgroundColor = UIColor.green
	}

	override func awakeFromNib() {
		print(#function)
		super.awakeFromNib()
		backgroundColor = UIColor.cyan
	}

	override func prepareForInterfaceBuilder() {
		print(#function)
		super.prepareForInterfaceBuilder()
        backgroundColor = UIColor.blue
	}
}

アプリ実行時(Interface Builderで生成した場合)

以下のようなコンソール出力が行われることから、init(coder:)の次にawakeFromNib()が呼ばれることが分かります。

init(coder:)

awakeFromNib()

アプリ実行時(コードで生成した場合)

ViewControllerのviewDidLoadに以下のようなコードを記述し、カスタムViewの生成を行います。

class ViewController: UIViewController {
	override func viewDidLoad() {
		super.viewDidLoad()

		let customView = CustomView(frame: CGRect.zero)
		view.addSubview(customView)
	}
}

アプリ実行時に以下のようなコンソール出力が行われることから、init(frame:)のみが呼ばれることが分かります。

init(frame:)

Interface Builder上でIBDesignableなViewとして動かした時

Interface Builder上での動作時にはprintの内容がコンソールに出力されないことから、viewのbackgroundColorを変更するコードを使って検証しています。

カスタムViewの色が青くなることから、prepareForInterfaceBuilderが呼ばれていることが分かります。

また、以下のコードをコメントアウトした場合はカスタムViewの色が初期状態から変化しないことから、prepareForInterfaceBuilderのみが呼ばれていることが分かります。

override func prepareForInterfaceBuilder() {
	print(#function)
	super.prepareForInterfaceBuilder()
	backgroundColor = UIColor.blue
}

まとめ

  • アプリ実行時
    • カスタムViewをIBで生成した場合
      • init(coder:)
      • awakeFromNib()
    • カスタムViewをコードで生成した場合
      • init(frame:)
  • Interface Builder上でIBDesignableなViewとして動かした時
    • prepareForInterfaceBuilder
この記事を書いた人
あきお(@akio0911
派手髪iOSエンジニア。Twitterアカウントは@akio0911。YouTubeチャンネル「あきおチャンネル」にてiOSアプリ開発講座を公開中。著書に「iPhoneアプリ開発レシピ」「cocos2d for iPhoneレッスンノート」など。iOSアプリ開発をテーマとしたオンラインサロン「アプリ道場サロン」を運営。東京・大阪にてアプリ開発講座「アプリクリエイター道場」を主催。

関連記事

この記事が気に入ったら「いいね!」しよう

Twitterで更新情報をゲット!

PAGE TOP ↑