在 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了解更多详情。
希望这会有所帮助:)
我有一个包含 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
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了解更多详情。
希望这会有所帮助:)