m_shige1979のときどきITブログ

プログラムの勉強をしながら学習したことや経験したことをぼそぼそと書いていきます

Github(変なおっさんの顔でるので気をつけてね)

https://github.com/mshige1979

swiftの学習(xcodeの画面遷移)

画面遷移

1つの画面だけだとあまりやることがないし、別の画面を一時的に呼び出して使用したいこともあるので…

遷移元設定

プロジェクトを作成し、storyboardにViewControllerを追加

f:id:m_shige1979:20141004120500p:plain

遷移元と遷移先にアイテムを設定

f:id:m_shige1979:20141004121538p:plain

buttonをcontrolを押しながらドラッグしてセグエを設定

f:id:m_shige1979:20141004121928p:plain

なんでもいいかもしれないけど以下を設定

f:id:m_shige1979:20141004122120p:plain

セグエのプロパティを指定

f:id:m_shige1979:20141004122459p:plain
※現時点ではデフォルト

遷移先設定

戻れないので戻るためのメソッドを用意(ViewController.swift
//
//  ViewController.swift
//

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    // 戻るボタン押下時のメソッド
    @IBAction func unWindows(segue: UIStoryboardSegue){
    }

}

※以下を追加

@IBAction func unWindows(segue: UIStoryboardSegue){
}

遷移先のボタンを「戻る」に変えて、controlでドラッグ

f:id:m_shige1979:20141004123300p:plain

actionのセグエに先ほど追加した「unWindows」を選択

f:id:m_shige1979:20141004123429p:plain

実行して確認

f:id:m_shige1979:20141004124220g:plain


画面遷移時に指定した値を渡す

セグエのidentifierに名前を設定する

f:id:m_shige1979:20141004125532p:plain

ViewDetailController.swiftファイルを用意して遷移先のviewと紐付け

f:id:m_shige1979:20141004131002p:plain

ViewController.swift
//
//  ViewController.swift
//

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var txt_data1: UITextField!
    @IBOutlet weak var txt_data2: UITextField!
     
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
        
        txt_data1.text = ""
        txt_data2.text = ""
    }
    
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
        println(segue.identifier)
        
        if segue.identifier == "page1" {
            // ViewDetailControllerへ遷移する際、値を渡す
            let viewDetailController: ViewDetailController = segue.destinationViewController as ViewDetailController
            
            // データを退避
            viewDetailController._data1 = txt_data1.text
            viewDetailController._data2 = txt_data2.text
            
        }
    }

    
    // 戻るボタン押下時のメソッド
    @IBAction func unWindows(segue: UIStoryboardSegue){
        if segue.identifier == "page2" {
            
            // 遷移元のControllerを取得
            let viewDetailController: ViewDetailController = segue.sourceViewController as ViewDetailController
            
            // 画面にデータを設定
            txt_data1.text = viewDetailController.txt_set_data1.text
            txt_data2.text = viewDetailController.txt_set_data2.text
            
        }

    }

}
ViewDetailController.swift
//
//  ViewDetailController.swift
//

import UIKit

class ViewDetailController: UIViewController {
    
    @IBOutlet weak var txt_set_data1: UITextField!
    @IBOutlet weak var txt_set_data2: UITextField!
    
    var _data1 = ""
    var _data2 = ""
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        // ここで設定
        txt_set_data1.text = _data1
        txt_set_data2.text = _data2
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
        
}
実行

f:id:m_shige1979:20141004135313g:plain
gifにするのは結構面倒だけどやっぱり動きがあるほうがわかりやすいと思う

まとめ

画面遷移の場合はセグエとか遷移する際一部動きを意識しないといけない。
まだ、マニュアルがよくわからないので検索しながらいくしかないけど。もう少しの予感
データの保存、読み込みなどやweb apiなどをうまく扱えるようになればアプリを作ってみてもいいかも
一気にやったらわからないことだらけでやる気をなくすのが悪いクセだけど治すより自身であんまりストレスを
抱え込まないようにして対応しようと思う。