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