2016-02-12 2 views
3

У меня есть stepper в моем ViewController, который управляет значением переменной в моем UIView. Когда я переустанавливаю переменные в 0 в моем UIView, я также хочу, чтобы шагомер и метка были сброшены, но они не будут. Я попытался использовать делегат, но я получаю сообщение об ошибке. Заранее спасибо!Swift delegate не работает

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() 
     } 
    } 
} 
+0

Какая ошибка вы получаете? –

+0

на этой строке: circleViewDelegate! .delegate = self, я получаю сообщение об ошибке: EXC_BAD_INSTRUCTION – Steve

+0

Вам не нужно 'circleViewDelegate' - вы хотите сказать' circleView1.delegate = self' – Paulw11

ответ

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) 
} 
+0

Работает. спасибо, очень по-настоящему ценю! – Steve

+0

Я обновил ответ, чтобы вызвать метод 'IBAction', который вы, вероятно, ожидали получить. Это обновит как метку, так и «CircleView». – Mark

1

Вместо назначения делегата, как это circleViewDelegate!.delegate = self в viewDidLoad попробовать circleView1.delegate = self

+0

исправлена ​​ошибка, но у меня все еще такая же проблема в моем вопросе – Steve

Смежные вопросы