Swift UIViewController中的delegate方式传值

来源:互联网 发布:编译php strip tags 编辑:程序博客网 时间:2024/06/06 01:53

ios swift开发中有几种方式传值,看到简书上一篇不错的文章。
链接:http://www.jianshu.com/p/3e1173652996

一.通过segue进行传值

二.通过delegate进行传值

三.通过Notification进行传值

四.通过回调函数进行传值

需求:

我们经常会使用navigationViewController,使用segue拉拉线,就可以实现页面跳转,使用prepareForSegue方便进行参数的正向传递,但我们也许也有的业务会是反向的传递参数,这个时候需要使用delegate。
假设有两个vc,事先做好了segue拉线,设置了按钮啥的,然后可以直接正向跳转,以及因为在一个navigation里面所以,第二个vc有个默认的back(发送并返回,这里即“发送给A“按钮)按钮可以反向的跳转,第一个是avc,第二个是bvc, 在bvc中我们写一个协议protocol,当然这个协议是写在类外面的,只是和类在同一个swift文件中。
这里写图片描述
这里写图片描述

通过segue和delegate正反向进行传值

这个例子AViewController 通过 segue 传值 BViewController,BViewController 通过delegate 传值 。1、AViewController的代码如下:

import UIKitclass AViewController: UIViewController {    @IBOutlet weak var receiveLabel: UILabel!    @IBAction func sendBtnAction(sender: AnyObject) {        self.performSegueWithIdentifier("toBviewController", sender: nil)    }    @IBOutlet weak var textField: UITextField!    override func viewDidLoad() {        super.viewDidLoad()    }    // MARK: - Navigation    // In a storyboard-based application, you will often want to do a little preparation before navigation    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {        if(segue.identifier == "toBviewController"){            var bVc:BViewController = segue.destinationViewController as BViewController            bVc.tempString = textField.text            bVc.delegate = self        }    }}extension AViewController:SendMessageDelegate{    func sendWord(message: String) {        receiveLabel.text = message    }}

2、SendMessageDelegate和BViewController的代码如下:

import UIKitprotocol SendMessageDelegate{    func sendWord(message : String)}class BViewController: UIViewController {    @IBOutlet weak var receiveLabel: UILabel!    @IBAction func sendBtnAction(sender: AnyObject) {        if((delegate) != nil){            self.delegate?.sendWord(textField.text)            self.navigationController?.popViewControllerAnimated(true)        }    }    @IBOutlet weak var textField: UITextField!    var tempString:String?    var delegate : SendMessageDelegate?    override func viewDidLoad() {        super.viewDidLoad()        self.receiveLabel.text = tempString    }    override func didReceiveMemoryWarning() {        super.didReceiveMemoryWarning()    }}
原创粉丝点击