我的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)
}
正如您所看到的,我的协议功能不包括我需要传回的任何数据,但消息仍未打印,这意味着该功能未被调用。如果有人能告诉我我做错了什么我会很感激。感谢
答案 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中的传统样式,并帮助其他人理解您的代码。