天天看点

IOS Swift 界面跳转以及传值

目前正在学习中,只知道三种界面跳转方式

1、通过 Main.storyboard 用鼠标拖拽控件到需要跳转的页面,选择 Present Modally 实现界面跳转

2、跳转到 Main.storyboard 创建了 View Controller 关联代码 ViewController 的界面

3、跳转到代码 ViewController (没有关联 Main.storyboard 创建的 View Controller)

1、通过 Main.storyboard 用鼠标拖拽控件到需要跳转的页面,选择 Present Modally 实现界面跳转

这种方式跳转不太熟悉,并不知道怎么传值,回带数据

IOS Swift 界面跳转以及传值

2、跳转到 Main.storyboard 创建了 View Controller 关联代码 ViewController 的界面

IOS Swift 界面跳转以及传值

如图所示

第一步:在 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 一样,参考即可

自己研究总有很多局限性,很多知识点了解的不够全面,希望各位大佬能够多多指点,如果有其他方式跳转传值或是补充,欢迎在评论区留言讨论