2016-02-11 24 views
0

我想要一個步進器和標籤在另一個類中的變量也被重置後重置爲零。變量重置,但步進器和標籤甚至沒有使用委託後。Swift對象在代理被調用後不會更新

視圖控制器:

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 
} 
} 

CircleView:

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

被稱爲主/ GUI線程你的委託? –

+0

委託真的叫了嗎?你能打印出它的價值嗎? –

+0

你是對的。我把打印放在一個代理函數中,沒有任何打印 – Steve

回答

2

的問題是,你讓你的CircleView的一個全新的實例。

let cycle = CircleView() 

您需要將委託設置爲當前工作實例。

要做到這一點,你應該用以下內容替換你的任務在你的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 
       } 
      } 
     } 
} 

Here's an article with project files.

+0

我試了一下,但同樣的問題 – Steve

+0

在我提供的鏈接中,您會發現一個簡單的項目,我可以將您的代碼與您的代碼進行比較。 –

+0

謝謝我欣賞 – Steve

相關問題