うさがにっき

読書感想文とプログラムのこと書いてきます

SingleViewApplicationから複数画面アプリを作る

概要

SingleViewApplicationを使って複数画面アプリを作る

詳細

2画面を移動するアプリを作る

新しい画面用のクラスを作る
iOS > Souce > Cocoa Touch ClassでNext
f:id:tiro105:20150321174412p:plain
UIViewContorollerのサブクラスとして新しいクラスを作る
f:id:tiro105:20150321174455p:plain

ViewControllerに戻って来るためのメソッドを作成する
これを「unwind segue」という
これを作らないと次の画面から戻ってこれない

    @IBAction func returnMenu(segue: UIStoryboardSegue) {
    }

storyboardに新しい画面を作る
storyboardにView Controllerを追加する
f:id:tiro105:20150321174620p:plain
追加したView Controllerに対応するクラスを追加したクラスnextViewControllerを紐づける
f:id:tiro105:20150321174834p:plain

次の画面へのボタンと、戻る用のボタンを作る
f:id:tiro105:20150321180314p:plain

nextボタンをCtrl + ドラッグで次の画面へ持って行き、present modallyを選ぶ
f:id:tiro105:20150321180434p:plain

prevボタンをCtrl + ドラッグで上の3つ並んだ右端のExitへ、先ほど作ったreturnMenuを選ぶ
f:id:tiro105:20150321180943p:plain

2画面間で数字をやりとりするアプリを作る

二つの画面を作成し、こんな感じの画面にする
f:id:tiro105:20150321181506p:plain

ViewControllerに「unwind segue」を二つ作る

    // この画面に戻ってきた時
    @IBAction func returnMenu_OK(segue: UIStoryboardSegue) {
        let newVC = segue.sourceViewController as nextViewController
        myCount = newVC.tmpCount
        myCount++
        println("前の画面から戻ってきた時<\(myCount)>")
    }

    // この画面に戻ってきた時
    @IBAction func returnMenu_Cancel(segue: UIStoryboardSegue) {
        println("前の画面から戻ってきた時<\(myCount)>")
    }

nextから次の画面に接続したsegueのidentifierにmySegueとつける
f:id:tiro105:20150321181707p:plain

OKボタンにはreturnMenu_OK、cancelボタンにはreturnMenu_Cancelを割り当てる
f:id:tiro105:20150321183838p:plain
f:id:tiro105:20150321183811p:plain

画面が切り替わるときのコードを書く
ViewControllerのsegueがmySegueの時だけcountをあげる

    // 画面が切り替わる時
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if(segue.identifier == "mySegue") {
            myCount++
            var newVC = segue.destinationViewController as nextViewController
            newVC.tmpCount = myCount
        }

これで次の画面に行った時はカウントアップ、次の画面でOKを押せば更にカウントアップされるようになる

参考

Swiftではじめる iPhoneアプリ開発の教科書 【iOS 8&Xcode 6対応】

Swiftではじめる iPhoneアプリ開発の教科書 【iOS 8&Xcode 6対応】