LoginSignup
115

More than 5 years have passed since last update.

Xcode6で「.xibファイル」+「自作UIViewクラス」で、汎用できるViewを作りたい

Last updated at Posted at 2014-12-19

今日の結論

ソースコード内で汎用できるViewを、xib+自作UIViewクラスで作ったとき、
Outletを置く時は、Objectに「"File's Owner"でなく、自作UIViewクラス」を指定する

経緯

久しくiOS開発をやっていなかったということもあり、
xibファイル+自作UIViewクラスで作成する方法に戸惑いましたので
手順をここに記載します。

環境

MacOS YOSEMITE 10.10.1
Xcode 6.1.1
言語 Swift

カスタムViewを作る手順

(手順1) .swiftファイルと、.xibファイルを作成する

  • CustomView.swift

create uiView.png
[Next] -> "Class:"に任意クラス名、"Subclass os:"に"UIView"を指定 -> [Next] -> [Create]

  • CustomView.xib

MyDailogView_xib.png
任意クラス名を指定して、ファイルを作成する



CustomView.png
↑こんな感じに作成できればOK

(手順2) CustomView.swiftファイル編集

例えばこんな感じ↓

import UIKit

class CustomView : UIView {

    class func instance() -> CustomView {
        return UINib(nibName: "CustomView", bundle: nil).instantiateWithOwner(self, options: nil)[0] as CustomView
    }

}

(参考)
http://qiita.com/ryota-ku/items/3e3485baed79842c51f2
http://blogios.stack3.net/archives/195

(手順3)xibファイルのCustomClassを設定する

  1. PlaceHoldersFile's OwnerCustom Classを 作成したViewファイル名(ここでは"CustomView")に変更する。

customclass1.png

  1. 設置されている最上位ViewCustom Classを 作成したViewファイル名(ここでは"CustomView")に変更する。

CustomClass2.png

(手順4)ViewのOutletを作成する

作者はここで不毛な2時間を過ごした。

  1. Outletを作成したいViewを.swiftファイルに引っ張ってくる(できなかったら手順3の設定を見直す)
  2. Objectに"Custom View(自分が作成したカスタムViewクラス)"を指定する。
    =>"File's Owner"を指定した場合、このカスタムViewを呼び出す処理でNSExceptionが発生してアプリが終了してしまう。

Outlet.png


↓↓↓↓↓↓できた!!↓↓↓↓↓↓↓
20141219104117.png

作者は、ここで3時間程、立ち止まりました(恥)

(手順5)ViewController等からカスタムViewを呼び出す。

各々使用したいところで、CustomView.instance()でカスタムViewを生成する。

    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        self.view.addSubview(CustomView.instance())
    }

最後に

iOS不明点が多い。Swiftもいろいろわからないです。
現状の知識で、なぜFile's OwnerではNSExceptionが発生するのか、説明できない。PlaceholdersFile's OwnerFirstResponder? 少しずつ頑張ります。
・・・AutoLayoutとかも謎なので、勉強したい。

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
115