IOS Swift 界面跳轉以及傳值

目前正在學習中,只知道三種界面跳轉方式

1、通過 Main.storyboard 用鼠標拖拽控件到需要跳轉的頁面,選擇 Present Modally 實現界面跳轉

2、跳轉到 Main.storyboard 創建了 View Controller 關聯代碼 ViewController 的界面

3、跳轉到代碼 ViewController (沒有關聯 Main.storyboard 創建的 View Controller)

 

1、通過 Main.storyboard 用鼠標拖拽控件到需要跳轉的頁面,選擇 Present Modally 實現界面跳轉

這種方式跳轉不太熟悉,並不知道怎麼傳值,迴帶數據

 

2、跳轉到 Main.storyboard 創建了 View Controller 關聯代碼 ViewController 的界面

如圖所示

第一步:在 Main.storyboard 拖出一個 View Controller 界面,上面的佈局可以忽略,按自己需要來就行了

第二步:創建一個 TelController.swift 文件命名按自己需求來

第三步:關聯好 View Controller 界面和 TelController.swift 文件。注意:上圖中 Storyboard ID 也可以按自己風格自定義,下面跳轉需要用到

這時,就可以來實現我們的跳轉代碼了,我們要做的是從第一個界面跳轉到通訊錄界面

            let uis = UIStoryboard(name: "Main", bundle:nil)

            let telController = uis.instantiateViewController(withIdentifier: "TelController") as! TelController

            telController.sendValueClsure = { (content : String) -> Void in

                //打印返回的數據

                print(content)

            }

            telController.content = "home-tel"

            telController.modalPresentationStyle = .fullScreen

            self.present(telController, animated: true, completion: nil)

上面代碼中,(withIdentifier: "TelController") 中的  TelController 就是上圖中的 Storyboard ID

telController.sendValueClsure 和 telController.content 是在 TelController.swift 中自定義的閉包和變量名,閉包用於返回值,變量用來傳值過去

TelController.swift 代碼如下所示:

import UIKit

//設置一個閉包,用來返回數據

typealias sendValueTel = (_ content : String) -> Void

class TelController: BaseController , UITableViewDataSource, UITableViewDelegate{

        



    //創建一個閉包屬性

    var sendValueClsure : sendValueTel?

    //屬性傳值

    var content : String? = nil



    @IBAction func telReturn(_ sender: UIButton) {

        self.sendValueClsure!("tel返回數據XXX")

        self.dismiss(animated: true, completion:nil)

    }

    override func viewDidLoad() {

        super.viewDidLoad()

        print(content ?? "tel-content-null")

        // Do any additional setup after loading the view.

    }

    

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        return 10

    }

    

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell:TelCell = tableView.dequeueReusableCell(withIdentifier: "TelCellId", for:indexPath) as! TelCell

        cell.telName.text = "123"

        return cell

    }

    

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        alerts(contents: "123")

    }



}

 

3、跳轉到代碼 ViewController (沒有關聯 Main.storyboard 創建的 View Controller)

第三種跳轉傳值和第二種類似,不過不用在 Main.storyboard 創建的 View Controller,直接跳轉到 WebController.swift 中

跳轉代碼於第二種不一樣:

            let webController = WebController()

            //將傳過來的值  賦給label

            webController.sendValueClsure = { (content : String) -> Void in

                //打印返回的數據

                print(content)

            }

            //傳遞一個值過去

            webController.content = "home-network"

            webController.modalPresentationStyle = .fullScreen

            self.present(webController, animated: true, completion: nil)

同樣的 webController.sendValueClsure 和 webController.content 是在 WebController.swift 中自定義的閉包和變量名,閉包用於返回值,變量用來傳值過去,定義方法和 TelController.swift 一樣,參考即可

 

自己研究總有很多侷限性,很多知識點了解的不夠全面,希望各位大佬能夠多多指點,如果有其他方式跳轉傳值或是補充,歡迎在評論區留言討論

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章