目 录CONTENT

文章目录
iOS

iOS 跳转页面和正反传值

ABin
2023-03-03 / 0 评论 / 0 点赞 / 19 阅读 / 0 字

1创建一个 ViewController

在storyboard 中按 Command + Shift + L 来搜索 ViewController 拖动到 storoyboard 中,

2创建ViewController对应的 ListViewController.swift 代码文件

Control + N 来创建一个 Cocoa Touch Class 继承自UIViewController

3去storyboard中 点击 新创建的 ViewController 顶部第一个按钮

在右边第一个Class中 填入刚创建好的 ListViewController.swift 名字然后回车 (不填.swift)

代码跟视图已经关联完成了

在主页面新建一个按钮用来跳转,

按住Control 吧按钮拖动到第二个 ViewController 选择Show Detail

完成后页面一和页面2 中间会有一条线 选中这条线在右侧的Identifier中填入ListViewController后回车

在第一个页面的Class 中填入一下代码

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    #ListViewController 是连接线的名字
    if segue.identifier == "ListViewController"{
            let list = segue.destination as! ListViewController
            #正向传值
            #list.name 是第二个方法的变量name,name是此方法的变量name
            list.name = name
            #反向传值用
            list.delegate = self
        }

}

在第二个代码页面创建一个名字叫name 的变量

#给一个默认值
var name: String = '';

此时在第二个代码viewDidLoad中打印name就会发现值已经被带过来了

override func viewDidLoad() {
        super.viewDidLoad()
        #打印
        print(name)
        // Do any additional setup after loading the view.
    }

在第二个页面创建一个 返回按钮,

(选择右上方的五条杠杠在点击Assistant)

把按钮拖动到代码页面

然后在button 代码中写入

#销毁当前页面
dismiss(animated: true)

接下来是 反向传值

在视图二的Class外添加以下代码

//反向传值
protocol ListViewControllerDelegate{
    func didChangeAllMoney(name: String)
}

Class 里

var delegate: ListViewControllerDelegate?

在返回按钮中添加

delegate?.didChangeAllMoney(name: '张三')

在视图一的Class中添加以下代码

func didChangeAllMoney(name: String) {
        #打印
        print(name)
    }
#注意override func prepare代码中的list.delegate = self一定要填写,
#还需要在视图一Class 后添加 ListViewControllerDelegate 否则 不生效
class ViewController: UIViewController, ListViewControllerDelegate {

}

完整代码:

#视图一代码
#注意Class 后的 ListViewControllerDelegate
class ViewController: UIViewController, ListViewControllerDelegate {

    ......

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        #ListViewController 是连接线的名字
        if segue.identifier == "ListViewController"{
                let list = segue.destination as! ListViewController
                #正向传值
                #list.name 是第二个方法的变量name,name是此方法的变量name
                list.name = name
                #反向传值用
                list.delegate = self
         }

    }

    func didChangeAllMoney(name: String) {
        print(name)
    }

}



#视图二

//反向传值
protocol ListViewControllerDelegate{
    func didChangeAllMoney(name: String)
}

class ListViewController: UIViewController{
    var name: String = 0.0;
    var delegate: ListViewControllerDelegate?
    
    ......

    //回退页面
    @IBAction func back(_ sender: Any) {
        #销毁当前页面
        dismiss(animated: true)
        #反向传值的内容
        delegate?.didChangeAllMoney(name: '张三')
    }

}

0

评论区