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

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