2015-06-30 7 views
11

У меня есть требование отображать UIProgressBar в UITableviewCell во время потоковой передачи аудиоклипа.Добавить UIProgressBar в UITableViewCell

Я попытался запустить NSTimer, а затем попытался обновить представление прогресса, но он не работает. Это мой код. Пожалуйста, дайте мне знать, что случилось с этим подходом.

Запустите таймер

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

Update UIProgressView в 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; 

выход должен быть что-то похожее на это

enter image description here

+0

Постарайтесь, чтобы ваш UITableViewCell как iVar в вашем UIViewController. Я думаю, что ваш прогресс сбрасывается или на листе t значение не сохраняется. – Jasper

ответ

1

В конце концов нашел этот вопрос после того, как почти 2 дней :(:( Ошибка была в этой линии

Wrong

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

скорректированным

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

Итак, в чем разница между двумя вышеуказанными методами? Оба варианта вызывают метод UITableViewDataSource cellForRowAtIndexPath. Это зависит от того, как вы создаете ячейку внутри этого метода. – Sandeep

0

При вызове [self.tblView reloadData] вы устанавливаете индикатор обратно 0.0 в следующей строке fCell.progressPlay.progress = 0.0. Удалите вызов reloadData.

+0

удалил [self.tblView reloadData]. Но ничего не происходит – sajaz