Swift xlibファイルを使ってViewを組み立ててみる。
いままでレイアウトは全てコードで書いてきたが、 複雑にレイアウトになった場合に、コード内のみとうしがかなり悪くなる。xlibでのレイアウトを試してみた。
その時の作業ログ
viewを新規作成
viewのOwnerを変更
UseXibVieクラスは先に作成しておく。
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>