我的 EditorViewController
以模态方式连接到我的 ModalViewController
,在 ModalViewController 中,我必须在 View 关闭后将一些数据传回 EditorViewController。我看过很多关于委托(delegate)和协议(protocol)的教程,我相信这是我必须做的来传递这些信息,但我似乎无法正确地编写代码,尽管我完全按照教程进行了操作。如果有人能看到这里出了什么问题,我将不胜感激。我会发布代码。
协议(protocol)
protocol passColorBackDelegate {
func colorToChange(_ color: String)
}
第一个 View Controller
class EditorViewController: UIViewController, passColorBackDelegate {
func colorToChange(_ color: String) {
print("Hello")
}
第二个 View Controller 文件(第一个有数据传回的那个),里面还有另一个类,我对我的文件很吝啬
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)
}
如您所见,我的协议(protocol)函数尚未包含我需要传回的任何数据,但消息仍未打印,这意味着该函数未被调用。如果有人能告诉我我做错了什么,我将不胜感激。谢谢
最佳答案
您需要在执行转场之前设置委托(delegate)。由于听起来您正在使用 Storyboard,因此可以在 prepare(for segue)
中完成:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let destinationVC = segue.destination as? ModalViewController {
destinationVC.delegate = self
}
}
此外,正如 Paul 在评论中提到的那样,大写您的协议(protocol) (PassColorBackProtocol
) 和类 (SubView
) 是 Swift 中的传统风格,可以帮助其他人理解您的代码.
关于ios - 协议(protocol)和委托(delegate)帮助?值(value)不会回传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44122919/