2013-11-21 4 views
1

Я хочу, чтобы отобразить представление хода в коллекции просмотра, когда пользователь нажимает на ячейке, а также хотят прогресс отображения зрения прогресса этой ячейки.Как отобразить UIProgressView на делекторе didSelectItemAtIndexPath UICollectionView в Objective-C?

//...in .h файл я объявили UIProgressView -

@property(nonatomic,retain)IBOutlet UIProgressView *pv; 

//...then использовать его в .m файл, как -

Я добавил UIProgressView in UICollectionView 's метод cellForItemAtIndexPath следующим образом;

- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UICollectionViewCell *cell = [cv dequeueReusableCellWithReuseIdentifier:@"ArticleCell" forIndexPath:indexPath]; 

    pv = [[UIProgressView alloc]init]; 
    pv.frame = CGRectMake(45, 270, 230, 50); 
    pv.progress = 0.0f; 
    pv.progressViewStyle = UIProgressViewStyleDefault; 
    pv.hidden = YES; 

    [cell.contentView addSubview:pv]; 

    return cell; 

} 

А потом показывают представление о ходе работы и ее прогресс в didSelectItemAtIndexPath следующим образом;

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
//to show progressview in cell.. 
      UICollectionViewCell *selectedCell = [collView cellForItemAtIndexPath:indexPath]; 

      NSLog(@"subviews - %@",selectedCell.contentView.subviews); 
      pv = (UIProgressView *)[selectedCell.contentView.subviews objectAtIndex:0]; 
      pv.hidden = NO; 

      [self performSelector:@selector(checkDownload) withObject:nil afterDelay:1.0]; 
} 


//to check whether all images are downloaded or not and showing progress accordingly 
-(void)checkDownload 
{ 
    NSError *error; 

    NSArray* arrArticleImages = [[NSArray alloc]init]; 

    arrArticleImages = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:imgPath error:&error]; 
    NSLog(@"arr cnt-%d",arrArticleImages.count); 

    if (arrArticleImages.count <= 8) 
    { 
     float m = (float)arrArticleImages.count/100; 
     float t = pv.progress ; 
     float g = m + t; 

     pv.progress = g; 

     NSLog(@"prgs-%f",g); 

     [self performSelector:@selector(checkDownload) withObject:nil afterDelay:4.0]; 
    } 
    else 
    { 
     pv.progress = 1.0; 

     [self insertIntoDatabase]; 

     [self performSelector:@selector(goToNewsPaperView) withObject:nil afterDelay:2.0]; 
    } 

    arrArticleImages = nil; 
} 

Но теперь проблема состоит в том, что я нажимаю на одну ячейку она начинает показывать progressview с прогрессом, но как только кликни на другую камеру между ними, прогресс первой ячейки останавливается, показывая прогресс и второй ход начинает показывать прогресс ,

Я хочу показать прогресс прогресса каждой ячейки, если она нажата.

Я думаю, что мой подход ошибочен.

Невозможно это выяснить.

Как я могу это сделать ??

Пожалуйста, помогите мне.

Спасибо ..

ответ

2

Это происходит потому, что Yout получение новых refrence вашего зрения прогресса в didSelectItemAtIndexPath. как насчет предыдущего упоминания прозеркатного взгляда.

Вы можете добавить все представление прогресса в NSDictionary с KeyValue путем индекса. И в checkDownload передать свой индекс пути затем получить, что представление о ходе от NSDictionary с прошедшим путем индекса и использовать его

// Инициализировать вам NSMutable словаря где-нибудь еще и добавить мнение о ходе или в

- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath 
     { 
      UICollectionViewCell *cell = [cv dequeueReusableCellWithReuseIdentifier:@"ArticleCell" forIndexPath:indexPath]; 

      pv = [[UIProgressView alloc]init]; 

      [dictionary setObject:pv forKey:indexpath]; 

     } 

Или вы можете добавить мнение о ходе в

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath 
     { 
     //to show progressview in cell.. 
      UICollectionViewCell *selectedCell = [collView cellForItemAtIndexPath:indexPath]; 

      NSLog(@"subviews - %@",selectedCell.contentView.subviews); 
      pv = (UIProgressView *)[selectedCell.contentView.subviews objectAtIndex:0]; 
      pv.hidden = NO; 
      [dictionary setObject:pv forKey:indexpath]; 

      [self performSelector:@selector(checkDownload) withObject:indexpath afterDelay:1.0]; 
     } 

Настройка вам checkDownload с

-(void)checkDownload:(NSIndexPath*)indexpath 
    { 
     pv = [dictionary objectForKey:indexpath]; 
    } 
+0

Спасибо за ваш ответ. Именно так я хочу. Но я не знаю, как это сделать. Не могли бы вы объяснить это кратко или предоставить пример кода? – Rohan

+1

Вы можете взять словарь в качестве переменной экземпляра, добавить представление прогресса к этой dictioanty в cellForIndexPath или didSelectItemAtIndexPath метод, соответствующий пути индекса –

+0

Я благодарю снова брата. Но как я могу добавить pv в словаре? – Rohan

0

Это потому, что вы используете один и тот же объект pv во всех клетках, что вам нужно сделать следующее:

Создание UIProgressView для каждой ячейки:

- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UICollectionViewCell *cell = [cv dequeueReusableCellWithReuseIdentifier:@"ArticleCell" forIndexPath:indexPath]; 

    UIProgressView *pv = [[UIProgressView alloc] init]; 
    pv.tag = 10; 
    ..... 
} 

И в вашем файле didSelectItemAtIndexPath получите ссылку и передайте ее функции загрузки:

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
//to show progressview in cell.. 
     UICollectionViewCell *selectedCell = [collView cellForItemAtIndexPath:indexPath]; 

     NSLog(@"subviews - %@",selectedCell.contentView.subviews); 
     UIProgressView *pv = (UIProgressView *)[selectedCell viewForTag:10]; 

     // pass the progressView to your checkDownload 
     [self performSelector:@selector(checkDownload:) withObject:pv afterDelay:1.0]; 
} 

и checkDownload будет:

-(void)checkDownload:(UIProgressView *)progressView{ 
    //use progressView instead of pv 
    .... 
} 
+0

Спасибо за ответ. Но чем я могу использовать этот прогресс в ** - (void) checkDownload ** метод для показа прогресса? – Rohan

+1

Вы можете пометить свой pv, 'pv.tag = 10;' и получить доступ к нему как 'progressView = (UIProgressView *) [yourCell viewForTag: 10];' – null

+0

Но как я могу получить доступ/использовать progressview in - (void) checkDownload method ?? – Rohan

 Смежные вопросы

  • Нет связанных вопросов^_^