2015-06-30 3 views
11

Ich habe die Anforderung, während des Streams eines Audioclips eine UIProgressBar in UITableviewCell anzuzeigen.UIProgressBar zu UITableViewCell hinzufügen

Ich habe versucht, eine NSTimer ausgeführt und dann versucht, die Fortschrittsanzeige zu aktualisieren, aber es funktioniert nicht. Das ist mein Code. Bitte lassen Sie mich wissen, was mit diesem Ansatz falsch ist.

Führen Sie den Timer

self.timer = [NSTimer scheduledTimerWithTimeInterval:0.25 
              target:self 
             selector:@selector(updatePlayProgress) 
             userInfo:nil 
             repeats:YES]; 

aktualisieren UIProgressView in TableviewCell

- (void)updatePlayProgress { 
    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 

    NSLog(@"Duration %f", appDelegate.moviePlayer.duration); 
    NSLog(@"Current time %f", appDelegate.moviePlayer.currentPlaybackTime); 

    float timeLeft = appDelegate.moviePlayer.currentPlaybackTime/appDelegate.moviePlayer.duration; 

    // upate the UIProgress 
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:playingIndex inSection:0]; 
    FeedCell *cell = (FeedCell*)[self tableView:self.tblView cellForRowAtIndexPath:indexPath]; 

    NSLog(@"Time left %f", timeLeft); 

    cell.progressPlay.progress = 0.5; 

    [cell.progressPlay setNeedsDisplay]; 
} 

CellForRowAtIndexPath

fCell.progressPlay.alpha = 0.5; 
fCell.progressPlay.tintColor = navigationBarColor; 
[fCell.progressPlay setTransform:CGAffineTransformMakeScale(fCell.frame.size.width, fCell.frame.size.height)]; 

[fCell.progressPlay setHidden:NO]; 

return fCell; 

Output sollte etwas ähnlich wie diese

enter image description here

+0

Versuchen war Ihr UITableViewCell zu haben als ein iVar in Ihrem UIViewController.Ich denke, dass Ihr Fortschritt zurückgesetzt wird, oder zu leas t Der Wert wird nicht beibehalten. – Jasper

Antwort

1

fand schließlich die Frage nach fast 2 Tage :(:( Fehler in dieser Zeile

Wrong

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:playingIndex inSection:0]; 
FeedCell *cell = (FeedCell*)[self tableView:self.tblView cellForRowAtIndexPath:indexPath]; 

Korrigierte

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:playingIndex inSection:0]; 
FeedCell *cell = (FeedCell*)[self.tblView cellForRowAtIndexPath:indexPath]; 
+0

Also, was ist der Unterschied zwischen den beiden oben genannten Methoden? Die beiden Varianten rufen die UITableViewDataSource-Methode cellForRowAtIndexPath auf. Es hängt davon ab, wie Sie die Zelle in dieser Methode erstellen. – Sandeep

0

, wenn Sie anrufen [self.tblView reloadData] Sie setzen den Fortschrittsbalken in der folgenden Zeile fCell.progressPlay.progress = 0.0 zu 0.0 zurück. Entfernen Sie den Anruf zu reloadData.

+0

hat [self.tblView reloadData] entfernt. Aber nichts passiert – sajaz