[iOS] Xcode - Segue

4174 ワード

これは学習内容を整理するための文章で、完全に正確ではないかもしれません.
参考までに、内容が足りないと思ったら、他の文章を読むこともできます.
+間違った部分、修正が必要な部分は、いつでもフィードバックしてください.😊
                                            by. Oxong
あるビューから別のビューに切り替える方法があります.
その中でも、Segueはかなり簡単な変換(接続)機能です.
ただしSegueに接続すると次のウィンドウが表示されますので、ActionSequeを選択する必要があります.

この動作にはどんな違いがありますか.

タイプの設定


◼️ Show (push)


一般的に最もよく使われるsegueです.
目的地ビューコントローラをナビゲーションスタックに重ねます.
ナビゲーションコントローラが設定されている場合、ターゲットビューコントローラは後退ボタンを生成します.
ナビゲーションコントローラがない場合はPresent Modallyを使用します.
モードを適用すると、移動した画面から元の画面に戻ることができません.

◼️ Show Detail (replace)


主にsplit View構造に用いられる.(ex.メモ帳アプリケーションのリスト->メモ帳をクリックしたときに表示される全画面)
split view controllerはサブビューコントローラを新しい内容に置き換え、他のビューコントローラはPresent Modally(モード)と表示されます.

◼️ Present Modailly


viewcontrollerを画面の下部から上部に引き上げ、画面をモードで表示します.
元の画面はモード画面の後ろにある状態です

◼️ Present As Popover


iPhoneではPresent Modelyと同じです.

◼️ Custom


開発者が指定した動作のsegue.
画面から画面への接続は,segueでなくても多様な方法がある.
segueを使用する最大の理由は、segueを使用してデータを交換できることです.
伝え方を話す前に、segueに関する方法を知っておきましょう.

Segueに関連する関数


◼️ shouldPerformSegue(withIdentifier: :)


セグウェイが行うかどうかを決める.
内部のある状態でゲートウェイを行わない場合は、この部分で状態に応じて返すことができます.
override func shouldPerformSegue(withIdentifier identifier: String, 
                          sender: Any?) -> Bool

◼️ prepare(for:sender :)


セグウェイが発生する前に実行します.(運転前準備)
senderはSegueをトリガするトリガオブジェクトです.
1つのビューコントローラでは、別のビューコントローラのゲートウェイが複数存在してもよい.
対応するトリガに基づいてブランチできます.
segue.identifier propertyを使用してsegueタイプに従ってブランチできます.
segue.destination/segue.source propertyを使用して、ターゲットビューコントローラにデータを転送できます.
  • どのsegueが実行されますか?
  • がsegueを実行すると、スクリーンはどこで移動しますか?
  • モバイル画面のデータはどのように変更されますか?
  • override func prepare(for segue:segue, sender: Any?)

    ◼️ performSegue(withIdentifier:, :)


    セグウェイを実行する.
    必要に応じてprepare(for:segue)でsegueを実行します.
    →疲労した時点を制御(制御)できる.
    主に、画面が表ビュー/コレクションビューの場合に使用されます.
    セルまたはアイテムをクリックすると、関連するデータを接続できます.
    テーブルビューの場合)didSelectRowAtIndexPath
    コレクションビュー)では、didSelectItemAtIndexPathメソッドを使用して実装されます.

    Segueでのデータ交換


    まず移動前の画面をソース(出発点)と呼び,移動後の画面を目的地(目的地,到着点)と呼ぶ.

    ▼▼ダイレクト転送(同期)


    present/push時にPropertyにアクセスおよび転送する方法

  • 空の文字列テキスト変数propertyをdestinationで宣言します.var text : String = ""

  • sourceはprepare(for:sender)メソッドで転送するデータを作成します.
  • override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    	// segue의 목적지가 secondViewController라면
    	if segue.destination is SecondViewController { 
        
        	// as? 뒤의 화면(secondViewController)으로 이동 시킬거야.
        	let vc = segue.destination as? SecondViewController 
            
            // 프로퍼티 값 대입
            vc?.text = self.segueTextField.text ?? "" 
        }
    }
  • 2で渡されたデータをターゲットのラベルに表示する場合は、viewDidLoad()で次のように指定します.
  • override func viewDidLoad(){
    	super.viewDidLoad()
        textLabel.text = text
    }

    ▼▼間接転送(非同期)


    🔹 UserDefaultの使用


    UserDefaulutsは、plistのようにキー値として値を格納/書き込みすることもできます.
    装置にあります.plist形式で保存します.
    マシンに格納されているファイルなので、アプリケーションを閉じてもデータは保存されます.
    簡単なユーザー情報(自動ログインするかどうか、チェックするかどうかなど)を格納するのに適しています.
    --------->AndroidのSharedPrefのようです?

    🔹 AppDelegateの使用


    AppDelegate

  • アプリケーションシーンのプリファレンスパラメータを設定し、

  • アプリケーションの最も重要なデータ構造の初期化を担当します.
  • ただし、AppDelegateにデータを格納し、アプリケーションが終了するとすべて初期化されます.
    ------->アプリケーションの終了時にデータを残すにはCoreDataとUserDefaultを利用する必要があります.

    Reference


    [Swift]データ転送
    iOS) Segue
    [iOS SWIFT]画面移動-segue