2012-04-08 2 views
1

У меня это работает, но мне интересно, почему метод, который я думал, должен работать, не работает. У меня есть .xib с uitableviewcell и WirelessCell.h/.m как класс. Я хотел добавить в ячейки объект ADVPercentProgressBar. Мой cellForRowAtIndexPath выглядит следующим образом:Добавление объектов в пользовательскую ячейку повторного использования

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    int section = indexPath.section; 
    int row = indexPath.row; 

    if (section == 6) { 
     // Make dynamic rows cell 
     static NSString *CellIdentifier = @"wireless3"; 
     WirelessCell *cell = (WirelessCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

     if (!cell) { 
      NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"WirelessCell" owner:nil options:nil]; 
      cell = [topLevelObjects objectAtIndex:0]; 
      cell.progressBar = [[ADVPercentProgressBar alloc] initWithFrame:CGRectMake(10, 22, 300, 28) andProgressBarColor:ADVProgressBarBlue]; 
      [cell addSubview:cell.progressBar]; 
     } 

     // Set labels here 
     NSDictionary *tmpDict = [[[DataSingleton sharedSingleton] sharedWirelessClients] objectAtIndex:row]; 
     cell.labelUptime.text = [tmpDict objectForKey:@"uptime"]; 
     [cell.progressBar setProgress:[[tmpDict objectForKey:@"signal"] intValue]*0.001]; 

     return cell; 

    } else { 
     return [super tableView:tableView cellForRowAtIndexPath:indexPath]; 
    } 

} 

Это прекрасно работает добавление ADVPercentProgressBar во время инициализации ячейки, но я думал, что я мог бы поставить ADVPercentProgressBar в клетках initWithStyle так:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 
{ 
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 
    if (self) { 
     // Initialization code 
     progressBar = [[ADVPercentProgressBar alloc] initWithFrame:CGRectMake(10, 22, 300, 28) andProgressBarColor:ADVProgressBarBlue]; 
     [self.contentView addSubview:progressBar]; 

    } 

, а не в инициализация ячейки ViewController. но это не сработает. Мне просто интересно, почему, поскольку мне кажется логичным добавлять объекты в инициализацию класса ячейки. return self; }

ответ

0

Если вы загружаете ячейку из Xib, тогда метод init не будет называться awakeFromNib. Также таким образом создаются все объекты и устанавливаются любые выходы.

+0

Ваше право, оно работает с использованием awakeFromNib. Но в приведенном выше коде (и то, что я сейчас использую с awakeFromNib) делает ли ячейка ячейкой, которая не является помехой? Имеет ли это значение? – Darren

+0

Если идентификатор совпадает с ним, он может быть удален. Не имеет значения, откуда взялась ячейка. –