我希望在另一个类中的变量也被重置后,步进器和标签重置为零。变量重置,但步进器和标签甚至在使用委托(delegate)后也不会重置。
View Controller :
class ViewController: UIViewController, CircleViewDelegate {
var colors = CircleView()
@IBOutlet weak var circleView1: CircleView!
@IBOutlet weak var redStepper: UIStepper!
@IBOutlet weak var redValue: UILabel!
@IBAction func stepperChange(sender: UIStepper)
{
circleView1.redd1 = Int(redStepper.value);
redValue.text = Int(sender.value).description;
}
func updateRedStepperValue(value: Double) {
redStepper.value = value
redValue.text = Int(colors.redd1.value).description;
}
override func viewDidLoad() {
super.viewDidLoad()
colors.delegate = self
}
}
圆形 View :
protocol CircleViewDelegate
{
func updateRedStepperValue(value: Double)
func updateGreenStepperValue(value: Double)
func updateBlueStepperValue(value: Double)
}
class CircleView: UIView
{
var delegate: CircleViewDelegate?
var redd1 = 0
func updateValues()
{
if(redd1==Int(red1))
{
redd1=0;
delegate?.updateRedStepperValue(0.0)//
}
}
}
最佳答案
问题是您创建了一个全新的 CircleView 实例。
let cycle = CircleView()
您需要将您的委托(delegate)设置为您当前的工作实例。
为此,您应该将 viewDidLoad 中的分配替换为以下内容:
override func viewDidLoad() {
super.viewDidLoad()
let app = UIApplication.sharedApplication().delegate! as! AppDelegate
if let viewControllers = app.window?.rootViewController?.childViewControllers {
viewControllers.forEach { vc in
if let cont = vc as? CircleView {
cont.delegate = self
}
}
}
}
关于ios - 委托(delegate)调用后 Swift 对象不会更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35329546/