【发布时间】:2017-05-22 22:14:20
【问题描述】:
我的EditorViewController 模态地连接到我的ModalViewController,在 ModalViewController 中,我必须在视图关闭后将一些数据传回 EditorViewController。我看过很多关于委托和协议的教程,我相信这是传递这些信息所必须做的,但我似乎无法正确地编写代码,尽管我完全按照教程进行操作。如果有人能看到这里出了什么问题,我将不胜感激。我会发布代码。
协议
protocol passColorBackDelegate {
func colorToChange(_ color: String)
}
第一个视图控制器
class EditorViewController: UIViewController, passColorBackDelegate {
func colorToChange(_ color: String) {
print("Hello")
}
第二个视图控制器文件(有数据要传回第一个的那个),里面还有另一个类,我对我的文件很吝啬
class subView: UIView {
}
class ModalViewController: UIViewController {
var delegate: passColorBackDelegate?
@IBAction func changeColor(_ sender: UIButton) {
switch sender {
case blueColorButton: colorToChangeTo = "Blue"
case redColorButton: colorToChangeTo = "Red"
case greenColorButton: colorToChangeTo = "Green"
case purpColorButton: colorToChangeTo = "Purple"
default: print("error")
}
print(colorToChangeTo)
delegate?.colorToChange(colorToChangeTo)
self.dismiss(animated: true, completion: nil)
}
如您所见,我的协议函数还没有包含我需要传回的任何数据,但消息仍然没有打印,这意味着函数没有被调用。如果有人能告诉我我做错了什么,我将不胜感激。谢谢
【问题讨论】:
-
你是在segue之前设置代理吗?你需要做这样的事情:
modalViewController.delegate = self. -
我应该把那行代码放在哪里?在
viewDidLoad()或prepare(for segue)中?在viewDidLoad()好像不太喜欢 -
更新:我试图把它放在
prepare(for segue)但它也给了我一个错误。就好像我的 ModalViewController 无法识别var -
仅供参考,您的协议应该是
PassColorBackDelegate- 协议以大写开头,结构和类也是如此。 -
糟糕,谢谢,我会更改它们
标签: ios swift cocoa-touch delegates protocols