Ich versuche, eine jede Zelle Zelle mit Fortschrittsbalken zu aktualisieren, aber ich bin fest. habe ich eine benutzerdefinierte Zelle für eine Tabellenansicht mit diesen Eigenschaften:Benutzerdefinierte UITableViewCell mit Fortschrittsbalken-Download-Update
@interface OFPTableCell : UITableViewCell
@property (nonatomic, weak) IBOutlet UILabel *textLabel;
@property (nonatomic, weak) IBOutlet UILabel *detailTextLabel;
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@property (weak, nonatomic) IBOutlet UIProgressView *progressView;
@end;
und nach nur ihnen @synthesize, jetzt habe ich wie erwartet in jeder Tabelle einen Fortschrittsbalken Zelle.
Das Problem ist, dass wenn ich versuche, gerade 1 Zelle mit einem Lade-Fortschrittsbalken zu aktualisieren, es einfach nichts oder seine 0 oder volle Fortschrittsbalken setzen. Beachten Sie, dass der Download-Vorgang ordnungsgemäß funktioniert.
Bellow Sie den Code finden kann, wo ich versuche, den Fortschrittsbalken zu aktualisieren:
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten
totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite: (int64_t)totalBytesExpectedToWrite
{
dispatch_async(dispatch_get_main_queue(), ^{
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
OFPTableCell *cell = (OFPTableCell*)[self tableView:self.tableViewCache cellForRowAtIndexPath:indexPath];
cell.progressView.progress=(double)totalBytesWritten/(double)totalBytesExpectedToWrite;
});
}
Unten ist die Methode cellForRowAtIndexPath:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
OFPTableCell *cell = [self.tableViewCache dequeueReusableCellWithIdentifier:@"Cell"];
OFPVideoDetails *vd = [someArray objectAtIndex:indexPath.row];
cell.textLabel.text=vd1;
cell.detailTextLabel.text=vd2;
CGSize size = {65,53};
cell.imageView.image =[self imageWithImage:[UIImage imageWithContentsOfFile:vd.imageUrl] scaledToSize:size];
cell.delegate = self;
return cell;
}
Eine weitere Frage anstelle von [self.tableViewCache reloadData]; Ich kann [self.tableViewCache neu ladenRowsAtIndexPaths: [NSArray arrayWithObject: indexPath] withRowAnimation: UITableViewRowAnimationNone]; ? – user3197376
Ja, Sie sollten natürlich nur eine Zeile neu laden, die sich zur aktuellen Zeit ändert. Ich schrieb oben nur allgemeine Idee, ohne solche Details zu berücksichtigen :) – Miroslav
Ich bekomme ** nil ** in: ** cell.progressView.progress = progressValues [indexPath.row]; ** –