在 TableViewCell 中配置 UIProgressView 等于 Controller 中的 UIProgressView

Configure UIProgressView in TableViewCell equal to the UIProgressView in the Controller

我有一个包含 UIProgressView 的 TableViewCell,我将进度值设置到控制器中的 UIProgressView 中,然后等于它们(即 self.progressBar=cell.progressBar),但在 iOS8&9 中,在 UI 中进度条停留在 0,但在 iOS7 中它起作用了。希望得到帮助。谢谢~下面是我的代码:

@property (strong, nonatomic) IBOutlet UIProgressView *progressBar;

- (void)viewDidLoad{
    [super viewDidLoad];
    self.timer = [NSTimer scheduledTimerWithTimeInterval: 0.1f target:self selector: @selector(handleProgressBar) userInfo: nil repeats: YES];
    [self.tableView reloadData];
}

- (void) handleProgressBar{
   if(self.usedTime >= 300.0)
   {
      [self.timer invalidate];
      self.timer=nil;
   }
   else
   {
      self.usedTime += 1;
      CGFloat progress = self.usedTime*(0.0033333333);
      [self performSelectorOnMainThread:@selector(updateProgress:) withObject:[NSNumber numberWithFloat:progress] waitUntilDone:NO];
      if(self.usedTime>200){
         [self.progressBar setProgressTintColor:[UIColor redColor]];} 
   }
}

- (void)updateProgress:(NSNumber *)progress {
   float fprogress = [progress floatValue];
   [self.progressBar setProgress:fprogress animated:YES];
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
  switch (indexPath.section) {
    case 0:
        return [self configQuestionCellWithQIndex:self.pageIndex+1];
        break;
    default:
        return nil;
        break;
  }
}

- (QuestionTableViewCell*) configQuestionCellWithQIndex:(NSInteger)qIndex{
QuestionTableViewCell* cell = [self.tableView dequeueReusableCellWithIdentifier:@"QuestionCell"];
[cell configCellWithQuestion:self.currentQuestion withQIndex:qIndex];
self.progressBar = cell.progressBar;
return cell;
}

快速思考 - 您是否尝试过换行:

self.progressBar = cell.progressBar;

与:

cell.progressBar = self.progressBar;

如果这解决了问题,那么我看不出它如何在 iOS7 上运行,但在 iOS8 或 iOS9 上却无法运行。

另一种选择是在 ViewController 和 UITableViewCell 中使用不同的 UIProgressView 实例 - 并可能使用来自您的 updateProgress: 方法的通知更新单元格中的 UIProgressView?

main thread

中执行您的 UI 更新
 dispatch_async(dispatch_get_main_queue(), ^{

       cell.progressBar = self.progressBar;

        //or 

        self.progressBar = cell.progressBar;



});

尝试在主线程上执行 UI 更新。

更新:

您可以像这样更新单元格中的进度条,

  - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 {
//... your code...
cell.progressView.progress = progressValues[indexPath.row];
// ...
return cell;
 }

并这样称呼它,

 dispatch_async(dispatch_get_main_queue(), ^{
 NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
 OFPTableCell *cell = (OFPTableCell*)[self tableView:self.tableViewCache    cellForRowAtIndexPath:indexPath];
 progressValues[indexPath.row] = (double)totalBytesWritten /  (double)totalBytesExpectedToWrite;
 [self.tableViewCache reloadData];
 });

参考this link了解更多详情。

希望这会有所帮助:)