协议和代表帮助?价值不会回头

时间:2017-05-22 22:14:20

标签: ios swift cocoa-touch delegates protocols

我的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)
}

正如您所看到的,我的协议功能不包括我需要传回的任何数据,但消息仍未打印,这意味着该功能未被调用。如果有人能告诉我我做错了什么我会很感激。感谢

1 个答案:

答案 0 :(得分:2)

在执行segue之前,您需要设置委托。由于听起来您正在使用Storyboard,因此可以在const pageCommands = { navigateToTab() { return this .waitForElementVisible('@tabOne') .click('@tabOne') }, }; module.exports = { url: pageUrl, commands: [pageCommands], elements: { tabOne: { selector: 'a[id="tab-one]', } }, };

中完成
    'test page': function (browser) {
    const loginPage = browser.page.login();
    loginPage
        .navigate()
        .login();
    const callPage = browser.page.callPage();
    callPage
        .navigate()
        .navigateToTab();
    browser.end();
}

另外,正如Paul在评论中提到的那样,将协议(prepare(for segue))和类(override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if let destinationVC = segue.destination as? ModalViewController { destinationVC.delegate = self } } )大写是Swift中的传统样式,并帮助其他人理解您的代码。