我在訪問事件處理程序中的實例var時遇到問題。事件處理程序中的實例var始終是初始值
當我試圖訪問事件處理程序中的實例var時,它似乎始終具有初始值,即使該值自此以後已更改。
在我簡單的演示應用程序,我有一個水平滑塊和一個UIImageView:
ViewController.swift
:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var slider: UISlider!
var canvas:MyCanvas?
override func viewDidLoad() {
super.viewDidLoad()
self.canvas = MyCanvas()
}
@IBAction func sliderValueChanged(sender: UISlider) {
self.canvas!.sliderValueUpdated(sender.value);
}
}
MyCanvas.swift
:
import Foundation
import UIKit
class MyCanvas : UIImageView {
// the var I care about
var sliderValue:Float = 0.5;
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override init(frame: CGRect) {
super.init(frame: frame)
}
override init() {
super.init()
}
func sliderValueUpdated (newValue:Float) {
self.sliderValue = newValue;
// prints the correct value
println(self.sliderValue)
}
override func touchesMoved(touches: NSSet, withEvent event: UIEvent) {
// always prints initial value, 0.5
println(self.sliderValue)
}
}
我設置MyCanvas.swift
爲自定義c對於UIImageView而言。
所以,當我調整滑塊,它打印出self.sliderValue
正確的值。但是,在此後觸發觸摸事件時,它始終會打印出初始值0.5
而不是滑塊值。
這是爲什麼?
我該如何解決這個問題?
我相信你有兩個不同的MyCanvas實例。你有沒有試圖將它設置爲你的UIImageView的自定義類? – cmatsuoka
我相信調試總能解決你的問題。 –
@cmatsuoka你是對的。 'MyCanvas''被實例化兩次。 (一次在代碼中,通過將其設置爲UIImage視圖的自定義類,這就是爲什麼該值永遠不會更新,我通過刪除self.canvas = MyCanvas()來修復它。 – snorpey