ios - 协议(protocol)和委托(delegate)帮助?值(value)不会回传

标签 ios swift cocoa-touch delegates protocols

我的 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/

相关文章:

ios - 用于移动 Web 服务的 Bluemix SSO

ios - 每 (N) 秒刷新 WebView

ios - 在 TableView 单元格中处理从 Firebase 检索数据的更好方法

ios - iOS Storyboard中的水平翻转方向

ios - 通过点击 Xib 文件中 TableView 中的单元格转到其他 ViewController,无需使用 segue

iphone - 我如何在导航 Controller 中弹出

swift - 如何使用动态表 (Swift) 更改 CoreData 中的开关

ios - 通过 TableView 编辑核心数据

ios - 如何访问类类别中的 dealloc 方法?

ios - 将 UIPanGestureRecognizer 添加到 UIView