闭包反向传值使用详解

2017-09-12  本文已影响0人  Insit

FirstViewController的代码

import UIKit

classFirstViewController: UIViewController, SecondViewControllerDelegate {

@IBOutletweak var showTextLabel: UILabel!

@IBOutletweak var showDelegateTextLabel: UILabel!

overridefunc viewDidLoad() {

super.viewDidLoad()

// Do any additional setup after loading the view.

}

//点击按钮跳转到SecondViewController

@IBActionfunc tapGoSecondViewController(sender: UIButton) {

//从storyboard上加载SecondViewController

let secondVC = UIStoryboard(name:"Main", bundle: NSBundle.mainBundle()).instantiateViewControllerWithIdentifier("secondViewController") as! SecondViewController

//实现回调,获取回调回来的值(闭包)

secondVC.backClosure = {

(backStr: String) -> Voidin

self.showTextLabel.text = backStr

}

secondVC.delegate =self

//跳转到SecondViewController

self.navigationController?.pushViewController(secondVC, animated:true)

}

//MARK: - SecondViewControllerDelegate(代理)

func fetchBackString(str: String) {

self.showDelegateTextLabel.text = str

}

overridefunc didReceiveMemoryWarning() {

super.didReceiveMemoryWarning()

// Dispose of any resources that can be recreated.

}

}

SecondViewController的代码

import UIKit

//定义闭包类型(特定的函数类型函数类型)

typealias InputClosureType = (String) -> Void

protocol SecondViewControllerDelegate: NSObjectProtocol{

func fetchBackString(str: String)

}

class SecondViewController: UIViewController {

@IBOutletweak var inputTextField: UITextField!

//接收上个页面传过来的闭包块

var backClosure: InputClosureType?

weak var delegate: SecondViewControllerDelegate?

overridefunc viewDidLoad() {

super.viewDidLoad()

// Do any additional setup after loading the view.

}

@IBActionfunc tapBackButton(sender: UIButton) {

ifself.backClosure !=nil{

iflet tempString =self.inputTextField.text {

self.backClosure!(tempString)

}

}

self.navigationController?.popViewControllerAnimated(true)

}

@IBActionfunc delegateBackMethod(sender: UIButton) {

ifself.delegate !=nil{

iflet tempString =self.inputTextField.text {

delegate!.fetchBackString("代理返回数据:\(tempString)")

}

}

self.navigationController?.popViewControllerAnimated(true)

}

overridefunc didReceiveMemoryWarning() {

super.didReceiveMemoryWarning()

// Dispose of any resources that can be recreated.

}

}

上一篇下一篇

猜你喜欢

热点阅读