2017-06-21 9 views
0

ラベルが付いたスライダビューがあります。スライダーの移動に合わせてラベル値を更新する必要があります。スライダが動作しているので、スライダの値をログで取得できます。しかし、ラベル値は、テーブルビューまたは対応するセルを再ロードするときにのみ更新されます。これはちらつきの影響を引き起こしています。スウィフトのラベルのスライダ値を更新する

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
{ 
    rangeSlider.backgroundColor = UIColor.clear 
    cell.addSubview(rangeSlider) 
    rangeSlider.tag = indexPath.row 
    rangeSlider.addTarget(self, action: #selector(PresentedViewController.rangeSliderValueChanged), for: .valueChanged) 
    NotificationCenter.default.addObserver(self, selector: #selector(showSliderValue), name: NSNotification.Name(rawValue: "slidervalue"), object: nil) 

    { 
     cell.currentMaximumValue.text = self.upperSliderText 
     cell.currentMinimumValue.text = self.LowerSliderText 
    } 
    else{ 
     let b:String = String(format:"%f", appDelegate.priceslidermaximumValue) 
     let c:String = String(format:"%f", appDelegate.pricesliderminimumValue) 
     cell.currentMaximumValue.text = b 
     cell.currentMinimumValue.text = c 
    } 

    return cell 
} 
+1

tableViewCellにスライダーがありますか? –

+0

はいテーブルビューのセル内 – Shpuj

+0

tableViewでどのようにデータを入力するのかをわかりやすく説明する 'cellForRowAt'のコードを表示 –

答えて

0

お返事ありがとうございます。 セルをリロードする際のちらつきの影響を解決するため、次の行を使用しました。

tableView.reloadSections(IndexSet(integer: indexPath.section), 
         with: UITableViewRowAnimation.fade) 

私のために働いた。

0

コードを変更する必要があります。

最初にcellForRowAtメソッドでセルオブジェクトをdequeueReusableCellで取得する場合は、addSubviewアクションを実行するときに注意する必要があります。したがって、あなたのセルオブジェクトは、既にスライダがある再利用可能なセルに過ぎません。サブビューを追加する前にすべてのビューを消去しないと、しばらくの間スクロールした後にセルにスライダがいっぱいになり、クラッシュする可能性があります。このスライダーをストーリーボードのカスタムテーブルビューセルに追加することをお勧めします。

第2に、NotificationCenter.default.addObserverを使用しないでください。 cellForRowは、表示用に準備されている各セルに呼び出されるため、オブザーバーを何度も追加しています。だからここ

は答え

がちょうどその後

cell.textField.text = sliderValues[indexPath.row] 
cell.slider.tag = indexPath.row // Use tag to see which cell your slider is located 
cell.slider.addTarget(self, action: #selector(sliderValueChanged), for: UIControlEvents.valueChanged) 

のようにリスナーを追加し、各セルのためにあなたのcellForRow

var sliderValues = [10, 20, 30, 40] 

をあなたのスライダー値を格納する配列を作成していますリスナーとの連携機能で

func sliderValueChanged(sender: UISlider){ 
    sliderValues[sender.tag] = sender.value 
    self.tableView.reloadData() 
}