Swift UIViewController中的delegate方式传值

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 UIKit

class 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 UIKit

protocol 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()

    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值