Swift代理不起作用。

4
我是一名能够翻译文本的助手。

我的ViewController中有一个步进器,用来控制UIView中变量的值。当我在UIView中将变量重置为0时,我也希望步进器和标签能够重置,但它们没有。我尝试使用代理,但出现了错误。谢谢!

ViewController:

protocol CircleViewDelegate: class {
    func updateStepper(view: CircleView)
}

class ViewController: UIViewController, CircleViewDelegate {

var colors = CircleView()

@IBOutlet weak var circleView1: CircleView!
@IBOutlet weak var blueStepper: UIStepper!
@IBOutlet weak var greenStepper: UIStepper!
@IBOutlet weak var redStepper: UIStepper!

@IBOutlet weak var redValue: UILabel!
@IBOutlet weak var greenValue: UILabel!
@IBOutlet weak var blueValue: UILabel!

var circleViewDelegate: CircleView!

override func viewDidLoad() {
    super.viewDidLoad()
    circleViewDelegate!.delegate = self
}

func updateStepper(view: CircleView) {
    redStepper.value=0.0;
    greenStepper.value=0.0;
    blueStepper.value=0.0;
}

@IBAction func stepperChange(sender: UIStepper) {
    circleView1.redd1 = Int(redStepper.value);
    redValue.text = Int(sender.value).description;
}

@IBAction func stepperChange1(sender: UIStepper) {
    circleView1.greenn1 = Int(greenStepper.value);
    greenValue.text = Int(sender.value).description;
}

@IBAction func stepperChange2(sender: UIStepper) {
    circleView1.bluee1 = Int(blueStepper.value);
    blueValue.text = Int(sender.value).description;
}

}

UIView:

class CircleView: UIView {    
    var redd1 = 0
    var greenn1 = 0
    var bluee1 = 0

    weak var delegate: CircleViewDelegate?

    func updateStepper() {
        delegate?.updateStepper(self)
    }

    func game() {
        if(redd1==Int(red1) && greenn1==Int(green1) && bluee1==Int(blue1)) {
            redd1 = 0;
            green1 = 0;
            blue1 = 0;
            updateStepper()
        }
    }
}

你得到了什么错误? - Kyle Redfearn
在这一行代码:circleViewDelegate!.delegate = self,我收到了错误提示:EXC_BAD_INSTRUCTION。 - Steve
您不需要使用 circleViewDelegate - 您想要使用 circleView1.delegate=self - Paulw11
谢谢,我修好了,但我在问题中仍然遇到了这个问题。 - Steve
设置断点。你的委托方法被调用了吗? - Paulw11
是的,我有我的打印函数,并且它可以工作。 - Steve
2个回答

2

试试这个:

override func viewDidLoad() {
    super.viewDidLoad()
    circleView1.delegate = self
}

func updateStepper(view: CircleView) {
    redStepper.value = 0.0
    greenStepper.value = 0.0
    blueStepper.value = 0.0

    stepperChange(redStepper)
    stepperChange(greenStepper)
    stepperChange(blueStepper)
}

我已经更新了答案,调用了你可能期望被调用的IBAction方法。这将同时更新标签和CircleView - Mark

1

不要像这样在viewDidLoad中分配委托circleViewDelegate!.delegate = self,尝试使用circleView1.delegate = self


它修复了错误,但我的问题仍然存在。 - Steve

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接