Swift xlibファイルを使ってViewを組み立ててみる。

いままでレイアウトは全てコードで書いてきたが、 複雑にレイアウトになった場合に、コード内のみとうしがかなり悪くなる。xlibでのレイアウトを試してみた。

その時の作業ログ

f:id:loosefingers:20160815205149p:plain

viewを新規作成

f:id:loosefingers:20160815210522p:plain

viewのOwnerを変更

f:id:loosefingers:20160815205444p:plain

UseXibVieクラスは先に作成しておく。

f:id:loosefingers:20160815205453p:plain

UINibでxibファイルを指定する

これでコードとxibが関連づけされる。

class UseXibView: UIViewController {
    override func loadView() {
        if let view = UINib(nibName: "SampleView", bundle: nil).instantiateWithOwner(self, options: nil).first as? UIView {
            self.view = view
        }
    }
}

Buttonを配置した場合

class UseXibView: UIViewController {
    @IBOutlet weak var Button: UILabel!
    override func loadView() {
        if let view = UINib(nibName: "SampleView", bundle: nil).instantiateWithOwner(self, options: nil).first as? UIView {
            self.view = view
            Button.text="chnageName";
        }
    }
}

weakに関しては、以下の記事が参考になった。 qiita.com

ちなみに、xibファイルの中身はこちら、

userLabel="File's Owner" customClass="UseXibView

上記の記述があるけれどこのファイルを移植すればそのまますんなりと流用できるのだろうか、それとも何か依存ファイルがあるのか、

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="10117" systemVersion="15G31" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES">
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
    </dependencies>
    <objects>
        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="UseXibView" customModule="app" customModuleProvider="target">
            <connections>
                <outlet property="Button" destination="EOh-jw-9AA" id="fHZ-33-s40"/>
            </connections>
        </placeholder>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <view contentMode="scaleToFill" id="iN0-l3-epB">
            <rect key="frame" x="0.0" y="0.0" width="414" height="736"/>
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <subviews>
                <label opaque="NO" userInteractionEnabled="NO" alpha="0.80000000000000004" contentMode="center" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Buttom" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="EOh-jw-9AA">
                    <rect key="frame" x="130" y="357" width="144" height="22"/>
                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
                    <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
                    <nil key="highlightedColor"/>
                    <color key="shadowColor" red="0.49803921579999999" green="0.49803921579999999" blue="0.49803921579999999" alpha="1" colorSpace="calibratedRGB"/>
                </label>
            </subviews>
            <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
            <simulatedScreenMetrics key="simulatedDestinationMetrics" type="retina55"/>
        </view>
    </objects>
</document>