、ストーリーボードファイルには、ジャンプとのViewControllerの伝統的な価値観
1.ジャンプ
最初は、それ自体が、私たちは、あなたが直接viewContollerの間で達成することができますジャンプすることができ、レイアウトファイルを構築するために多くの便利な方法を提供しています絵コンテ、ストーリーボードは、「接続」操作により、ページやのViewControllerコレクションのコレクションとして見ることができます。これは、私たちが書くコードの量を削減するだけでなく、ページ間の論理的なジャンプを見るために私たちを助けるだけでなく、ここで私は、操作の簡単に、モードを言う:
コントロールボタン(タッチパッドダウンプレス)ダウン新しい少数のViewController、使用およびホールド、ドラッグ、矢印付きのラインがあるだろう、それを解放し、あなたがジャンプしたいのViewControllerに移動し、いくつかの行動の選択肢の一つは、ショーに総選挙を表示されています
2.Actionセグエ差
いくつかのタイプにセグエ、前記プッシュ、モーダル、ポップオーバーと非推奨を交換してください。
- 公演
- 詳細を表示
- 現在モーダル
- ポップオーバーとして存在
- カスタム
押すモーダルポップオーバー置き換えます
公演
- この方法は、ビューのための適応コントローラ、柔軟なプレゼンテーションを提供します。
- UINavigationControllerスタックビューを使用した場合。先のビューナビゲーションは、スタックの最上部に押し込まれます。ナビゲーションバーには、戻るボタンを提供します。
- UIViewController例、及び本()一貫した結果で使用された場合。
詳細を表示
- 表示と似ていますが、ソースビューを置き換え、そして何のバックナビゲーションボタンがありません。
現在モーダル
- )(現在使用してください
- 必要に応じて、さまざまなプレゼンテーションがあり、それを設定することができます。画面全体をカバーするために、一般的に下からアニメーションの形でIPhone、ユーザービューにない対話することのできる、あなたは現在のビューをオフにしない限りは、iPadの中で、一般的に中央ボックス、次のポップアップからアニメーション化するボックスの中心地、としてレンダリング底面図コントローラ暗くします。
- 戻るボタンを提供していません。
ポップオーバーとして存在
- iPadの、フローティングウィンドウスタイルのレンダリングにターゲットビューでは、ターゲットビューの外側の領域をクリックして、ターゲットビューは消え、iPhone、目標のデフォルトビューは、全画面モードをカバーします。
GIFは、下記のショーのさまざまな方法を実証し、現在は新しいページに表示されます:
3.逆転移
本モーダル戻しボタンが設けられていない、「逆転移(アンワインドセグエ)」を設定する必要があります
この方法はUIStoryboardSegueでなければならない唯一のパラメータの型で、修飾@IBActionがあります:コントローラを終了する必要が法に予定されています
@IBAction func close(segue:UIStoryboardSegue){
let vc = segue.source as! ReviewViewController
//反向传值
print(vc.data)
}
協会は、ストーリーボード上の逆転移を指定する
ドラッグビューを終了し、選択の近くにはCtrl閉じる]ボタンを:
4.値の転送
最初のページ無効にvc.messageでデータの転送を充填する、方法を準備します。
//使用SB连接转场每次都会触发下面方法
override func prepare(segue: UIStoryboardSegue, sender: AnyObject?) {
//可再每个连线处类似按钮的东西加上identifier,即可判断不同指向
if segue.identifier == "segueIdentifier" {
//不带导航的方式
let vc = segue.destinationViewController as! nextVC
//下个视图前了带了导航的方式
//let nv_vc = segue.destinationViewController.childViewControllers[0] as! nextVC
vc.message = "传值"
}
}
第二に、任意のレイアウトファイルなしのViewControllerの間のジャンプ
例でのUIViewController
本発明()メソッドは、それぞれ、()メソッドを閉じ。
//present方式
let vc = SecondViewController()
self.present(vc, animated: true, completion: nil)
//dismiss方式
self.dismiss(animated:true,completion:nil)
例2. UINavigationController
それぞれpushViewController()メソッドpopViewController()メソッド。
let viewController = ViewController()
self.navigationController?.pushViewController(viewController, animated:true)
前のビューに戻ります
self.navigationController?.popViewController(animated:true)
//使用匿名变量可以消除“返回值未使用”警告
_ = self.navigationController?.popViewController(animated:true)
指定されたビューへ戻ります
//弹回根视图
self.navigationController?.popToRootViewControllerAnimated(true)
//指定位置
self.navigationController?.popToViewController((self.navigationController?.viewControllers[0])!, animated: true)
第三に、ViewControllerを持つストーリーボードインターフェイス間のジャンプ
let sb = UIStoryboard(name: "Main", bundle:nil)
let vc = sb.instantiateViewControllerWithIdentifier("SecondViewController") as! SecondViewController
self.presentViewController(vc, animated: true, completion: nil)
注:StoryboardIDを設定することを忘れないでください、あなたは内の識別子インスペクタを変更することができます
第四に、価値によって
往路値
モード1
最初のインターフェイスでのアクションを追加します
@IBAction func touch(_ sender:AnyObject){
let vc = ViewControllerTwo()
vc.data = "第一个界面传入的数据"
self.present(vc, animated:true, completion:nil)
}
第2のインタフェースで使用されます
override func viewDidLoad(){
super.viewDidLoad()
print(data)
}
モード2
第2のインタフェースに新しいコンストラクタを定義します
init(data:String){
self.data = data
super.init(nibName:nil, bundle:nil)
}
インスタンス化クラスへの最初のインターフェイスを使用して、新しい工法ViewControllerTwo
@IBAction func touch(_ sender:AnyObject){
let vc = ViewControllerTwo(data:"第一个界面传入的数据")
self.present(vc, animated:true, completion:nil)
}
逆転送値
複素値の往路復路よりも値の大きい、プロトコルは、一般的に閉鎖を完了するために、実際の開発又は復路値に使用。
モード1の使用契約
第2のインタフェースプロトコルを作成します。
protocol ViewControllerTwoProtocol {
func setData(data:String)
}
var delegate:ViewControllerTwoProtocol?
[戻る]ボタンをクリックすると、通過する価値があります
func ret(){
delegate?.sentData(data:"第二个界面返回的值")
self.dismiss(animated:true, completion:nil)
}
契約を遵守する、と合意を達成するために、値ViewControllerTwoProtocolインターフェースによって最初のメソッド
class ViewController:UIViewController:UIViewController,ViewControllerTwoProtocol{
@IBAction func touch(_ sender:AnyObject){
let vc = ViewControllerTwo(data:"第一个界面传入的数据")
//设置代理
vc.delegate = self
self.present(vc, animated:true, completion:nil)
}
func sentData(data:String){
print(data)
}
}
【実施例2クロージャを使います
第2の界面でクロージャを作成し、値を渡します
var closure:((String)->Void)?
func ret(){
self.closure!("第二个界面返回的值")
self.dismiss(animated:true, completion:nil)
}
割り当て閉鎖のための最初のインターフェイス
@IBAction func touch(_ sender:AnyObject){
let vc = ViewControllerTwo(data:"第一个界面传入的数据")
//设置代理
vc.closure = {(data:String) in
print(data)
}
self.present(vc, animated:true, completion:nil)
}