gpt4 book ai didi

ios - 关于 swift 中的委托(delegate)和协议(protocol)的问题(举例)

转载 作者:行者123 更新时间:2023-11-30 10:58:34 24 4
gpt4 key购买 nike

我正在尝试使用委托(delegate)和协议(protocol),但遇到了问题。

我在一个 ViewController 上创建了 2 个按钮,并在另一个 ShowViewController 中创建了 1 个 imageView。 imageView 的颜色会根据按下的按钮而改变。

ViewController.swift

import UIKit

protocol getColorProtocol {
func getColor(color:String?)
}


class ViewController: UIViewController {

var color: String?

var delegate:getColorProtocol?

@IBAction func blueButtonPressed(_ sender: Any) {

color = "blue"
delegate?.getColor(color: color)
}

@IBAction func redButtonPressed(_ sender: Any) {

color = "red"
delegate?.getColor(color: color)

}


override func viewDidLoad() {
super.viewDidLoad()

}



}

ShowViewController.swift

import UIKit


class ShowViewController: UIViewController, getColorProtocol {

var viewOne = ViewController()

@IBOutlet weak var colorView: UIImageView!

func getColor(color: String?) {
print("color is \(color!)")

if color == "red"{
colorView.backgroundColor = UIColor(displayP3Red: 255/255, green: 0/255, blue: 0/255, alpha: 1)
}
else if color == "blue" {
colorView.backgroundColor = UIColor(displayP3Red: 0/255, green: 0/255, blue: 255/255, alpha: 1)

}


}

override func viewDidLoad() {
super.viewDidLoad()

viewOne.delegate = self

}

}

press here to view the storyboard !

您可以查看上面的 Storyboard。

目前没有错误,但无法调用getColor函数。我想知道问题是否来自 delegate?.getColor(color: color) 语句。

有什么想法吗?

最佳答案

首先,就您的情况而言,您不需要使用委托(delegate)模式

您的ViewController通过segue直接连接到ShowViewController您可以使用 prepareForSegue 代替

其次,我认为您不了解委托(delegate)模式的工作原理,在 ShowViewController 内部,您创建了一个名为 viewOne 的新 ViewController,它不是原始的 ViewController,所以这就是您的代码不起作用的原因正如预期的那样

正如我上面提到的,你应该使用 segue

首先,转到storyboard设置您的segue标识符。然后,在您的 ViewController

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
if (segue.identifier == "goToShowVC") {
//your code here
}
}

关于ios - 关于 swift 中的委托(delegate)和协议(protocol)的问题(举例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53663158/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com