【发布时间】:2016-12-07 20:43:15
【问题描述】:
在下面的代码中,我有一个ViewController("SenderViewController"),当点击按钮时,它会向主ViewController 传递一条消息。我不完全理解的是主ViewController 中的messageData() 方法如何知道何时收听消息。
有人可以解释一下是什么触发了主ViewController 中的messageData() 方法吗?
SenderViewController:
import UIKit
protocol SenderViewControllerDelegate {
func messageData(data: AnyObject)
}
class SenderViewController: UIViewController {
@IBOutlet weak var inputMessage: UITextField!
var delegate: SenderViewControllerDelegate?
@IBAction func sendData(sender: AnyObject) {
/
if inputMessage.text != ""{
self.presentingViewController!.dismissViewControllerAnimated(true, completion: nil)
self.delegate?.messageData(inputMessage.text!)
}
}
}
主视图控制器:
import UIKit
class ViewController: UIViewController, SenderViewControllerDelegate{
@IBOutlet weak var showData: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func goToView(sender: AnyObject) {
let pvc = storyboard?.instantiateViewControllerWithIdentifier("senderViewController") as! SenderViewController
pvc.delegate = self
self.presentViewController(pvc, animated:true, completion:nil)
}
// What triggers this method, how it know when to listen?
func messageData(data: AnyObject) {
self.showData.text = "\(data)"
}
}
非常感谢!
【问题讨论】:
-
这个来自
func sendData在SenderViewController中的调用self.delegate?.messageData正在执行它。 -
跟着这个教程,你会得到答案 - tutorialspoint.com/ios/ios_delegates.htm
-
使用委托 Swift 4.0 传递数据:iosdevcenters.blogspot.com/2017/11/…
标签: ios swift delegates protocols pass-data