iOSアプリでセグエを使ってビューを切り替えてみる

iOSアプリでセグエを使ってビューを切り替えてみる。

【参考】
Swiftでセグエを利用した画面遷移 - Qiita
http://qiita.com/tajihiro/items/45c7adf2ef15df79bbf1

まずはビューを追加。

切り替え用のボタンを追加し、確認用にラベルを設置する。

Ctrlキーを押しながらボタンをドラッグし、

「show」を選択する。

「show」以外にも色々あるが、まだ良くわかっていない。

[Xcode 6] セグエの名前が新しくなりました | Developers.IO
http://dev.classmethod.jp/references/xcode-6-segue/

segue - swift Segueの種類について - スタック・オーバーフロー
http://ja.stackoverflow.com/questions/17290/swift-segue%E3%81%AE%E7%A8%AE%E9%A1%9E%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6

すると、セグエが作成される。

起動すると、1つめのビューが表示され、

ボタンを押すと、2つめのビューに切り替わる。

Main.storyboardのxmlを見ると、下記のような感じでsegueのタグが追加されている。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document ・・・>
    ・・・
    <scenes>
        <!--View Controller-->
        <scene ・・・>
            <objects>
                <viewController id="BYZ-38-t0r" customClass="ViewController" customModule="sample" customModuleProvider="target" sceneMemberID="viewController">
                    ・・・
                    <view ・・・>
                        ・・・
                        <subviews>
                            <button ・・・>
                                ・・・
                                <connections>
                                    <segue destination="AWU-rU-sZq" kind="show" id="eNg-p1-agv"/>
                                </connections>
                            </button>
                        </subviews>
                        ・・・
                    </view>
                </viewController>
                ・・・
            </objects>
        </scene>
        <!--View Controller-->
        <scene ・・・>
            <objects>
                <viewController id="AWU-rU-sZq" sceneMemberID="viewController">
                    ・・・
                </viewController>
                ・・・
            </objects>
            ・・・
        </scene>
    </scenes>
</document>

パラメータを渡してみる

次に、遷移先のビューにパラメータを渡すパターンを試してみる。

まずは、2つ目のビュー用のクラスを用意する。

[File]-[New]-[File]を選択し、

[Cocoa Touch Class]を選択する。

適当にクラス名を入力し、「UIViewController」を選択すると、

ファイルが作成される。

2つ目のViewを選択して、「ViewController2」を設定する。
これで、2つ目のビューとViewController2のクラスが紐付けられる。


続いて、二つ目のビューに、パラメタ受け取りの設定をする。

ラベルを右クリックでドラッグして、

適当に変数名を設定する。

受け取りようの変数を追加し、

// 受け取り用の変数
var ccc:String? = ""

受け取ったパラメタをラベルに設定するよう、viewDidLoadに下記の処理を追加する。

// 画面遷移の前にテキストフィールドの値を設定
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){
    let view2:ViewController2 = segue.destinationViewController as! ViewController2
    view2.ccc = aaa.text
}

これで、ViewController2で受け取ったパラメタをラベルに表示できるようになる。


最後に、テキストフィールドのパラメタを2つ目のビューに渡すよう修正する。

テキストフィールドを追加し、

右クリックでドラッグして、

適当な変数名を設定する。

下記の処理を追加し、画面遷移前にテキストフィールドの値を、2つ目のビューのパラメタに設定する。

// 画面遷移の前にテキストフィールドの値を設定
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){
    let view2:ViewController2 = segue.destinationViewController as! ViewController2
    view2.ccc = aaa.text
}
asの後ろに「!」が無いとエラーになる。まだswiftの文法がよく分からない。

以上で、パラメタの引き渡しの処理が完成。


実行して、テキストフィールドに文字を入力し、ボタンを押すと、

2つ目のビューのラベルに入力した文字列が表示される。