2013-06-18 204 views
0

我有一個UITableView與自定義UITableViewCells,它使用NSDictionary來填充其標籤和圖像。我的問題是,我有一個從服務器返回的NSArray,其中包含每個單元格(NSDictionaries)的信息。所有單元格都是UITableViewCell的相同子類,但我需要每個單元格使用不同的數組。下面是一些代碼:UITableView與自定義單元格

//I use this method to create the cell, and build it using the NSDictionary passed to it 
+ (CategoryCell *)generateCategoryCellWithInfo:(NSDictionary *)dict; 
{ 
    CategoryCell *cell; 
    NSArray *xib = [[NSBundle mainBundle] loadNibNamed:@"CategoryCell" owner:self options:nil]; 
    cell = [xib objectAtIndex:0]; 

    if (dict != nil) 
    { 
     //build the cell 
     cell.videoTitle.font = [UIFont fontWithName:@"FuturaStd-CondensedBold" size:17.0f]; 
     cell.videoTitle.text = [dict objectForKey:@"title"]; 

     dispatch_async(dispatch_get_global_queue(0, 0), ^(void){ 
      NSData *fullImageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:[dict objectForKey:@"fullImage"]]]; 
      if (!fullImageData) 
      { 
       return; 
      } 
      else 
      { 
       dispatch_async(dispatch_get_main_queue(), ^(void){ 
        [cell.contentButton setImage:[UIImage imageWithData:fullImageData] forState:UIControlStateNormal]; 
       }); 
      } 
     }); 

     cell.numberOfViewsLabel.text = [NSString stringWithFormat:@"%@ views", [dict objectForKey:@"views"]]; 
    } 
    else 
    { 
     //set placeholders 
     cell.numberOfViewsLabel.text = @"1200 people viewed this"; 
     cell.numberOfLikesLabel.text = @"20 people liked this"; 
     [cell.contentButton setImage:[UIImage imageNamed:@"[email protected]"] forState:UIControlStateNormal]; 
     cell.videoTitle.text = @"A Baby Dances in its Car Seat or Something"; 
    } 

    return cell; 
} 

這裏就是細胞產生

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CategoryCellIdentifier = @"categoryCell"; 
    CategoryCell *cell = (CategoryCell *)[tableView dequeueReusableCellWithIdentifier:CategoryCellIdentifier]; 

    if (!cell) 
    { 
     cell = [CategoryCell generateCategoryCellWithInfo:[itemsArray objectAtIndex:0]]; 
     cell.delegate = self; 
    } 

    return cell; 
} 

現在,我只是用第一的NSDictionary的NSArray的itemsArray,但我想有每個單元傳遞itemsArray中的一個不同的NSDictionary。有人可以幫我嗎?

回答

1

如果你用你的表0部分:

只要改變[itemsArray objectAtIndex: 0][itemsArray objectAtIndex: indexPath.row]在你tableView:cellForRowAtIndexPath:方法。

如果你有你的表我會建議增加一個全局變量NSInteger indexCountForItemsArray;每次tableView:cellForRowAtIndexPath:增加它不止一個section被調用。

在這兩種情況下我想補充的公共方法像-(void)setInfo:(NSDictionary)dict到tableViewController,並比相同/相似的代碼就像在你的類方法+(CategoryCell*)generateCategoryCellWithInfo:(NSDictionary *)dict

- (void) setInfo : (NSDictionary*) dict { 
    if (dict != nil) { 
     //build the cell (your known code here) 
    } 
} 

- (UITableViewCell*) tableView : (UITableView*) tableView 
     cellForRowAtIndexPath : (NSIndexPath*) indexPath 
{ 
    static NSString *CategoryCellIdentifier = @"categoryCell"; 
    CategoryCell *cell = (CategoryCell *)[tableView dequeueReusableCellWithIdentifier:CategoryCellIdentifier]; 

    if (cell == nil) { 
     cell = [CategoryCell generateCategoryCellWithInfo : [itemsArray objectAtIndex: indexCountForItemsArray]]; 
     cell.delegate = self; 
    } else { 
     [cell setInfo : [itemsArray objectAtIndex: indexCountForItemsArray]]; 
    } 

    self.indexCountForItemsArray += 1; 
    return cell; 
} 

希望這可以幫助你。

+0

完美的作品!謝謝您的幫助。 –

+0

很高興,不客氣 – anneblue

相關問題