UiSlider应该每秒在UITableviewCell内更新

时间:2013-08-27 13:46:56

标签: ios uitableview

我有一个要求,我需要在UITableview的单元格中显示滑块。它基本上是一个下载表视图,其中音频项目继续下载,下载的进度被捕获并显示在tableview的单元格中。每次下载项目时,我都会收到一个委托方法,并调用reload表来更新表视图。这导致滚动问题,其中表格不会滚动平滑,因为它将重新加载单元格以进行项目下载。我该如何解决这个问题?

由于

3 个答案:

答案 0 :(得分:1)

Accid Bright肯定是正确的,并且可能是一个超过可接受的解决方案。但是,如果您仍然看到性能问题,那么当它们被重新加载时,单元格仍然会做太多工作。我要做的是仅更新UISlider

的值
NSIndexPath *indexPath = /* index path to the current row to be updated */
MyCustomCell *cell = (id)[self.tableView cellForRowAtIndexPath:indexPath];
[cell.slider setValue:DOWNLOAD_PROGRESS animated:NO];

在不相关的说明中,我建议您使用UIProgressView代替UISlider,因为它更适合显示进度。

答案 1 :(得分:0)

也许

// indexPaths array contains NSIndexPath of you cell with UISlider.
NSArray * indexPaths = @[[NSIndexPath indexPathForRow:1 inSection:0]];
[self.tableView reloadRowsAtIndexPath:indexPaths withRowAnimation:UITableViewRowAnimationNone]; 

可以帮到你。这允许仅更新一些行,而不是所有表。

即使它没有解决问题,最好只更新一行,而不是每秒更新所有数据到表。

答案 2 :(得分:0)

雨燕4 非常简单的方法就是使用它,只需复制过去的代码即可享受

@objc func sliderUpdate(slider: UISlider){
//MARK:- Add new row in table view
    let indexPath = IndexPath(row: slider.tag, section: 0)
    let cell = self.tableview.cellForRow(at: indexPath) as!  MessagingSenderCell  */MARK:- User user cell name because i am using the MessagingSenderCell for chat and i have use the slider for send a voice message/*
    let cmTime = CMTime(seconds: audioPlayer.duration, preferredTimescale: 1000000)

     let duration : CMTime = cmTime
     var seconds : Float64 = CMTimeGetSeconds(duration)

     self.tableview.beginUpdates()
     cell.slider.maximumValue = Float(seconds)
     self.slidertimer = Timer.scheduledTimer(withTimeInterval: 0.25, repeats: true) { timer in
                seconds -= 0.25
                if seconds <= 0 {
                    //print("Go!")
                    self.slidertimer.invalidate()
                    cell.slider.setValue(0, animated: false)
                    self.tablev.endUpdates()
                } else {
                   // print(self.responds)
                   //print("Slider: " + "\(self.sliderr.value)")
                   //print("Player: " + "\(self.audioPlayer.currentTime)")

                    cell.slider.setValue(Float(self.audioPlayer.currentTime), animated: false)
                }
            }


}