2012-02-02 2 views
1

У меня есть свойство DotImageView в моем подклассе UITableViewCell.Отображение UIImageView в подклассе UITableViewCell в cellForRowAtIndexPath

@property (nonatomic, retain) IBOutlet UIImageView *DotImageView; 

Я стараюсь, чтобы отобразить его, как это в методе cellForRowAtIndexPath:

static NSString *TargetCellIdentifier = @"TargetDetailTableViewCellIdentifier"; 
    TargetDetailTableViewCell *cell = (TargetDetailTableViewCell *)[tableView dequeueReusableCellWithIdentifier:TargetCellIdentifier]; 
if (cell == nil) { 
    UINib *nib = [UINib nibWithNibName:@"TargetDetailTableViewCell" bundle:nil]; 
    [nib instantiateWithOwner:self options:nil]; 
    cell = self.TargetCell; 
    self.TargetCell = nil; 
} 
NSUInteger row = [indexPath row]; 
NSInteger section = [indexPath section]; 

Target *aTarget = [targetDictionary objectForKey:[NSNumber numberWithInteger:section]]; 

if (row == 0) { 
     UIImage *dot; 
     if (aTarget.importance == high) { 
      dot = [UIImage imageNamed:@"dot_red.png"]; 
     } 
     else { 
      dot = [UIImage imageNamed:@"dot_gray.png"]; 
     } 
     UIImageView *variantImageView = [[UIImageView alloc] initWithImage:dot]; 
     cell.DotImageView = variantImageView; 
     [variantImageView release]; 
     return cell; 

Я не вижу изображение в моей камере. Остальные ярлыки моего подкласса UITableViewCell действительно отображаются. Я что-то упустил с помощью UIImageView? Я не очень хорошо знаком с этим. Благодарю.

+0

cell.DotImageView его созданный? возможно, вы забыли связать его в xib – Edig

+0

, когда вы скажете: «У меня есть свойство DotImageView в моем UITableViewSubclass», это UITableViewCell? Я думаю, нам нужно увидеть ваше объявление UITableViewCell в методе cellForRowAtIndexPath. – TheRonin

+0

@Ernesto Я проверил наконечник, и он выглядит связанным – Crystal

ответ

0

изменить код, как

if (row == 0) { 
     UIImage *dot; 
     if (aTarget.importance == high) { 
      dot = [UIImage imageNamed:@"dot_red.png"]; 
     } 
     else { 
      dot = [UIImage imageNamed:@"dot_gray.png"]; 
     } 
     cell.DotImageView.image = dot; 
     return cell; 

что вы делаете это вы присваиваете новый объект UIImageView к cell.DotImageView теперь вашему cell.DotImageView указует на этот локальный объект вида изображения не тот объект, который находится на XIb

+0

Он связывает ячейку с выходом TargetCell на контроллере представления, а затем загружает ячейку в это свойство. Это действительный подход и немного более безопасный тип, чем версия objectAtIndex (что, если ячейка не является первым объектом в nib, например), но я согласен, ваш подход намного меньше кода и работает так же хорошо в большинстве случаев. Я не думаю, что поэтому его код не работает. –

+0

отредактирован снова .... –

0

Я получил это работает с

[cell.DotImageView setImage:dot]; 

Я не уверен, почему это работает против другого метода, который я первоначально имел.

+0

Это не работает в оригинале, потому что, когда вы заменяете изображениеView ячейки, вам также нужно добавить новое изображениеView в качестве подсмотра ячейки, иначе это просто свойство ячейки, это фактически не в иерархии представлений.Если честно, я бы придерживался последнего подхода - намного проще. –

0

1 - Базовый случай

Просто используйте свойство изображения стандартного UITableViewCell. Он подходит для большинства случаев.

2 - Пользовательский случай

Позаботьтесь, ваша собственность является простой ссылкой на ваш ImageView. Поэтому изменение его значения не заменяет исходное в дереве subviews. Вместо этого сохраните свой ImageView и просто установите его свойство UIImage лучше.

yourImageView.image = aNewImage. 
0

Вставить в TargetDetailTableViewCell класс метод:

- (void)setDotImage:(UIImage*)dot{ 



[self.DotImageView setImage:dot]; 


} 

Это работает для меня. Надеюсь, это поможет вам!

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