我正在为iPad Pro开发一个应用程序。在这个应用程序中,containerView
用于添加额外的views
并与它们交互。
首先,我创建了一个协议:
protocol DataViewDelegate {
func setTouch(touch: Bool)
}
然后,我创建了第一个视图控制器
import UIKit
class ViewController: UIViewController, DataViewDelegate {
@IBOutlet var container: UIView!
@IBOutlet var labelText: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
func setTouch(touch: Bool) {
if touch == true {
labelText.text = "Touch!"
}
}
}
最后,我创建了一个视图,它将嵌入到containerView中。
import UIKit
class ContainerViewController: UIViewController {
var dataViewDelegate: DataViewDelegate?
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func touchMe(sender: AnyObject) {
dataViewDelegate?. setTouch(true)
}
}
但是由于某种原因,什么也没有发生,第一个视图控制器在setTouch函数中什么也没有收到。
我的问题是:在这种情况下,使用容器,我如何在两个ViewsController之间进行通信?
2条答案
按热度按时间3pmvbmvn1#
就像@nwales说的,你还没有设置委托。你应该在你的第一个viewController(包含viewContainer)上的prepareForSegue函数中设置委托。
首先选择embed segue并在属性检查器中设置一个标识符,然后在parentViewController中实现函数prepareForSegue,如下所示:
斯威夫特4+:
下图:
htzpubme2#
看起来你定义了委托人,但还没有设置委托人。这种情况经常发生在我身上。