2016-03-28 14 views
1

ラベルとイメージを持つテーブルビューセルがあり、イメージをスクロールしてラベルが変更されています。これはセルデキュー機能によるものです。 imageviewをnilにすると動作しません。 繰り返しの問題は、画像の配列から画像を取り込むPinImageViewであり、画像をURLから取り込むものではありません。再利用可能性のためにテーブルビューのセルが繰り返し表示される

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 

    static NSString *[email protected]"cellIdentifier"; 
    TripInfoListCell *cell=[tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 

    if (cell==nil) { 
     cell=(TripInfoListCell *)[[[NSBundle mainBundle] loadNibNamed:@"TripInfoListCell" owner:self options:nil] firstObject]; 

    } 

    cell.PinImageView.image = nil; 


    NSString *direction=[dict123 valueForKey:@"direction" ] ; 
    NSString *drive_status=[dict123 valueForKey:@"driver_or_rider"]; 

    if((indexPath.row==totalRow-1)&&[direction isEqual:@"From"]) 
    { 
     __weak TripInfoListCell *weakCell = cell; 

     cell.PinImageView.image=[UIImage imageNamed:@"[email protected]"]; 
     cell.userNameLabel.text=loggedUser.profile_name; 

     [email protected]"Driver"; 

     if([drive_status isEqual:@"Ride"]) 

     { 
      [email protected]"Driver"; 
      [email protected]"Driver"; //In case of "Rider" "From" name in the last row 
        } 
     else{ 
     [email protected]"You"; 
     } 

     NSString *imagePic = [[NSUserDefaults standardUserDefaults] objectForKey:@"user_image"]; 
    NSURLRequest *request=[NSURLRequest requestWithURL:[NSURL URLWithString:imagePic]]; 

     [cell.userImageView setImageWithURLRequest:request placeholderImage:nil success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) { 

      weakCell.userImageView.image=image; 

     } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) { 

      NSLog(@"%@",error); 
     }]; 


    } 
    else if((indexPath.row==totalRow-1)&&[direction isEqual:@"To"]) 

    { 
     cell.PinImageView.image=[UIImage imageNamed:@"[email protected]"]; 
     cell.userNameLabel.text=[_tripDetails objectForKey:@"park_name"]; 

     NSString *image=[NSString stringWithFormat:@"%@",[dict123 objectForKey:@"parkBannerImageUrl"]]; 

     [[ImageHandler sharedInstance] getImageFromURL:image withCompletion:^(UIImage *image) { 

      if (image) { 

       [cell.userImageView setImage:image]; 
      } 
     }]; 
    } 
    else 
     if ([tableGoersList count] > indexPath.row) 
     { 

      NSDictionary *goersInfo=[tableGoersList objectAtIndex:indexPath.row]; 

     [[NSUserDefaults standardUserDefaults]setObject:[goersInfo valueForKey:@"user_image_url"] forKey:@"user_image"]; 
     [[NSUserDefaults standardUserDefaults]synchronize]; 

     __weak TripInfoListCell *weakCell = cell; 

     NSURLRequest *request=[NSURLRequest requestWithURL:[NSURL URLWithString:goersInfo[@"user_image_url"]]]; 

     [cell.userImageView setImageWithURLRequest:request placeholderImage:nil success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) { 

      weakCell.userImageView.image=image; 

     } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) { 

      NSLog(@"%@",error); 
     }]; 

     if((indexPath.row==0)&&[direction isEqual:@"To"]) { 

      if([drive_status isEqual:@"Drive"]){ 

      [email protected]"Driver"; 


      cell.PinImageView.image=[UIImage imageNamed:@"[email protected]"]; 
      cell.userNameLabel.text=loggedUser.profile_name; 
      [email protected]"You"; 
      } 
      else{ 
      } 
     } 
     else if((indexPath.row==0)&&[direction isEqual:@"From"]) { 

      if([drive_status isEqual:@"Drive"]) 
      { 

      cell.PinImageView.image=[UIImage imageNamed:@"[email protected]"]; 
      cell.userNameLabel.text=[_tripDetails objectForKey:@"park_name"]; 
      [email protected]""; 
      [email protected]""; 

      NSString *image=[NSString stringWithFormat:@"%@",[dict123 objectForKey:@"parkBannerImageUrl"]]; 

      [[ImageHandler sharedInstance] getImageFromURL:image withCompletion:^(UIImage *image) { 

       if (image) { 

        [cell.userImageView setImage:image]; 
       } 
      }]; 
      } 
      else{ 
       NSLog(@"rider from"); 
       [email protected]""; 

      } 

     } 
     else{ 

      imageNameArray = [[NSArray alloc] initWithObjects:@"[email protected]", @"[email protected]", @"[email protected]", @"[email protected]", @"[email protected]",@"[email protected]",@"[email protected]", nil]; 

      NSString* nameStr=[goersInfo valueForKey:@"name"]; 

      NSArray * nameStrArray = [nameStr componentsSeparatedByString: @"'s"]; 
      nameStr=[nameStrArray objectAtIndex:0]; 
      cell.riderDriverSlNo.text=[NSString stringWithFormat:@"Rider %ld",(long)indexPath.row]; 

      index = [TripInfoVC ifNameExists:_arrName Name:nameStr]; 

      if(index == 0) 
      { 
       cell.PinImageView.image=[UIImage imageNamed:[imageNameArray objectAtIndex:0]]; 
       [_arrName addObject:nameStr]; 

      } 
      if(index == 1) 
      { 
       cell.PinImageView.image=[UIImage imageNamed:[imageNameArray objectAtIndex:1]]; 
      } 
      if(index == 2) 
      { 
       cell.PinImageView.image=[UIImage imageNamed:[imageNameArray objectAtIndex:2]]; 
      } 

      if(index == 3) 
      { 
       cell.PinImageView.image=[UIImage imageNamed:[imageNameArray objectAtIndex:3]]; 
      } 


      if(index == 4) 
      { 
       cell.PinImageView.image=[UIImage imageNamed:[imageNameArray objectAtIndex:4]]; 
      } 

      if(index == 5) 
      { 
      cell.PinImageView.image=[UIImage imageNamed:[imageNameArray objectAtIndex:5]]; 
      } 

      if(index == 6) 
      { 
      cell.PinImageView.image=[UIImage imageNamed:[imageNameArray objectAtIndex:6]]; 
      } 

      if(index == 7) 
      { 
      cell.PinImageView.image=[UIImage imageNamed:[imageNameArray objectAtIndex:0]]; 
      } 

      if(index == 8) 
      { 
      cell.PinImageView.image=[UIImage imageNamed:[imageNameArray objectAtIndex:1]]; 
      } 

      if(index == 9) 
      { 
      cell.PinImageView.image=[UIImage imageNamed:[imageNameArray objectAtIndex:2]]; 
      } 

      if(index == 10) 
      { 
      cell.PinImageView.image=[UIImage imageNamed:[imageNameArray objectAtIndex:3]]; 
      } 

     } // this pinImageView is the pin image which is repeated on scrolling 

    return cell; 
} 

この問題を解決するのを手伝ってください。

答えて

0

とUICollectionViewで

遅延ロード画像あなたがかもしれ閉鎖衝突に直面しています。完了ブロックの宣言時

[cell.userImageView setImageWithURLRequest:request placeholderImage:nil success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) { 

      weakCell.userImageView.image=image; 

     } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) { 

      NSLog(@"%@",error); 
     }]; 

weakCellは、UITableViewデリゲートによって要求されたセルオブジェクトへのポインタです。 プロセスのダウンロードは即時ではないので、後でテーブルをスクロールするときに再利用することができます。その時点で完了ブロックが実際に呼び出される場合があります。

どのように処理するのですか?私はなどを使用するなど、UITableViewCell.tagプロパティは、正確に何のイメージが私は現時点では、セルが必要と要求し、それは私が完了ブロックが実行されているときにそのセルに入れようとしている画像と一致するかを識別する。他のダウンロードが後で実行され、タグのプロパティが上書きされた可能性があります。

+0

の場合、問題は "cell.PinImageView.image = [UIImage imageNamed:@" [email protected] "];"このPinImageViewは配列から画像を取得しています –

0

操作キュー上のUICollection cellForRowAtIndexPathメソッドの委譲メソッドにコードを追加することで、ロードイメージを即時または遅延ロードで実装する必要があります。

そして、あなたは、メインスレッドの内部に配置されているUI上で何かをやっている場合は、ここで別の例である:SDWebImageManager

関連する問題