您的位置:首页 > 移动开发 > Swift

swift页面传值之block(闭包)传值

2015-10-05 10:11 429 查看
页面1 跳转到页面2。如果想从页面1得到页面2的值的话,其实可以在页面2中调用:

( self.presentedViewController as! ViewController).label.text = self.textField.text


还可以用其他方式:block,KVO,通知中心,delegate传值等。

block方式:

第二个页面:

class VC2: UIViewController,UITextFieldDelegate {
var block:((String)->())?//定义一个闭包
@IBOutlet weak var textField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
self.textField.delegate = self
}
func textFieldShouldReturn(textField: UITextField) -> Bool {
//点击键盘的return 的时候将block的值传回。
if block != nil{
//此处的block 其实已经是 第一个页面getValueFromNextPage 的引用了
block!(textField.text!)
}
self.dismissViewControllerAnimated(true, completion: nil)
return true
}
}


第一个页面:

class ViewController: UIViewController {

@IBOutlet weak var label: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
//定义一个函数,其实也可以定义一个block:   var block:(String)->Void = {self.label.text = $0}
func  getValueFromNextPage(string:String){
self.label.text = string
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let vc2 = segue.destinationViewController as! VC2
//第二个页面的block并没有初始化,因为第二个页面的block是第一个页面getValueFromNextPage的引用。
vc2.block = getValueFromNextPage
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: