2016-06-26 18 views
0

スライダの値を表示するためにスライダとテキストラベルを作成しました。どちらのプログラムで行わ:私のテーブルビュー内の'sliderChanged:インスタンスに送信された認識できないセレクタ'

class FilterCell: UITableViewCell { 

override init(style: UITableViewCellStyle, reuseIdentifier: String?) { 
    super.init(style: style, reuseIdentifier: reuseIdentifier) 
    setupViews() 
} 

required init?(coder aDecoder: NSCoder) { 
    fatalError("init(coder:) has not been implemented") 
} 

let slider : UISlider = { 
    let slider = UISlider() 
    slider.minimumValue = 0 
    slider.maximumValue = 50 
    slider.value = 50 
    slider.continuous = true 
    slider.userInteractionEnabled = true 
    slider.translatesAutoresizingMaskIntoConstraints = false 
    return slider 
}() 

var distanceLabel : UILabel = { 
    let label = UILabel() 
    label.text = "Distance: 50km" 
    label.font = UIFont.systemFontOfSize(15.0) 
    label.textColor = UIColor.blackColor() 
    label.translatesAutoresizingMaskIntoConstraints = false 
    return label 
}() 

func sliderChanged(sender: UISlider) { 
    var sliderValue = sender.value 
    distanceLabel.text = "Distance: \(sliderValue)km" 
} 
} 

私はスライダーの値を変更する関数を呼び出します。

func tableView(tableView:UITableView, cellForRowAtIndexPath indexPath:NSIndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCellWithIdentifier(filterCellId) as! FilterCell 
    cell.slider.addTarget(self, action: #selector(FilterCell.sliderChanged(_:)), forControlEvents: .ValueChanged) 

    return cell 

} 

スライダとラベル表示罰金。値を変更するためにスライダとやりとりすると、クラッシュし、 'sliderChanged:]:インスタンス0x7fb06d0df040に送られた認識できないセレクタ'が発生します。

+0

つまり、セレクタを実行しようとしたオブジェクトのタイプが重要です。 – Rob

答えて

2

あなたが「認識されないセレクター」エラーを取得するとき(「`sliderChanged`」前のビットとして)私たちに何かを伝える完全なエラー・メッセージが含まれ、次回は、cellにターゲットを追加してみませんself

cell.slider.addTarget(cell, action: #selector(FilterCell.sliderChanged(_:)), forControlEvents: .ValueChanged) 
+0

は完璧に働いています – luke

+0

自己は常に監視クラスを参照しています。この場合はおそらくUIViewControllerです。 – Sethmr

+0

はい、 'sliderChanged'メソッドをView Controllerに配置する場合は、代わりに' self'を渡してください。 –

関連する問題