2012-02-14 4 views
0

У меня есть UITableViewCell, он отключен с прокруткой и с фиксированными разделами и строками.Динамически отображать изображение в UITableViewCell

Есть две секции, с 1 строкой в ​​разделе 0, и несколько строк в разделе 1.

The Tableview для пользователей, чтобы сделать какой-то выбор.

Таким образом, первый раздел (только один ряд) будет отображать результат выбора пользователей,

и нет сомнений, второй раздел (с несколькими строками) для выбора.

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

и это изображение будет меняться в зависимости от пользователей выбрать.

Очень легко оценить, какое изображение png должно отображаться, но у меня есть проблема с его обновлением.

Я попытался использовать изображение ячейки и вручную разместить UIImageView или UIView для отображения этих изображений.

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

Я попробовал некоторый метод, как

[myImage setNeedsDisplay] для ручного alloced зрения,

или

[thatCell setNeedsDiaplsy] & [self.tableView reloadData] для ImageView этой клетки,

но зря.

Так интересно, как я могу достичь этой функции, которая динамически отображает изображение в UITableViewCell в разных ситуациях?

Большое спасибо!

__ _ __обновление линии_ ____

Мне жаль, что я не предоставил свой код.

и вот они.

- (UITableViewCell *)tableView:(UITableView *)tableView 
cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *inOutTableCellIdentifier = @"DealTableViewIdentifier"; 
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:inOutTableCellIdentifier]; 
if (cell == nil) { 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 
            reuseIdentifier:inOutTableCellIdentifier] autorelease]; 
    cell.textLabel.font = [UIFont fontWithName:cMyFont size:[UIFont systemFontSize]]; 
    cell.detailTextLabel.font = [UIFont fontWithName:cMyFont size:[UIFont smallSystemFontSize]]; 
    // I tried using both imageView and UIView here, but won't work 

    if (indexPath.section == 0) { 
     //cell.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"moneyCell.png"]]; 
     cell.backgroundColor = [UIColor cyanColor]; 
     // cell.imageView.image = [UIImage imageNamed:@"dealDone2.png"]; 
     self.undoneIcon = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 50, 50)] autorelease]; 
     //self.undoneIcon.image = [UIImage imageNamed:@"dealUndone2.png"]; 
     self.undoneIcon.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"dealUndone2.png"]]; 
     [cell.contentView addSubview:self.undoneIcon]; 
     .... // deal with other rows in section 1 
     return cell; 
} 
// and this is the method that update the image, the images are named "dealDoneX.png", 
// where X is an integer from 0 to 4. 
- (void)checkUndoneDegree { // here I also tried 2 ways corresponding to UIView or a cell's imageView, but neither works well. 
int i = 0; 
if (self._date) 
    i++; 
if (self.moneyTextField.text) 
    i++; 

if (self._incomingAccount) 
    i++; 
if (self._expensingAccount) 
    i++; 
if (_dealType != kTransferView) 
    if (self._type) 
     i++; 
NSLog(@"undone degree: %d",i); 
NSString *imageName = [@"dealUndone" stringByAppendingFormat:@"%d",i]; 
self.undoneIcon.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:imageName]]; 
[self.undoneIcon setNeedsDisplay]; 
// NSUInteger p[2] = {0,0}; 
// UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathWithIndexes:p length:2]]; 
// [cell setNeedsDisplay]; 
} 

и каждый раз, когда я обновить данные таблицы, как меняется текст некоторой ячейки,

Я бы назвал [себя checkUndoneDegree], а затем вызвать [self.tableView reloadData],

Но изображение никогда не обновляется, по крайней мере, с экрана.

Я даже пытался поставить коды, решить, какой формат PNG, чтобы установить в

  • (UITableViewCell *) Tableview: (UITableView *) Tableview cellForRowAtIndexPath: (NSIndexPath *) indexPath {

, но он может только сделать представление, отображающее первый png, без какого-либо обновления.

Спасибо за помощь!

+0

Мне кажется, что если вы тестируете раздел/строку в таблицеView: cellForRowAtIndexPath :, он должен работать. Может быть, вам не хватает чего-то простого? Попробуйте отладить этот метод и посмотрите, будет ли он вызван как ожидалось. Все остальное звучит правильно - я делаю то же самое, кроме как в динамической таблице, и все работает отлично. –

+0

Как насчет того, чтобы вы показали нам какой-то код? – lawicko

+0

Покажите нам, как вы создаете ячейку с изображением. – jrtc27

ответ

1
  1. Сделайте undoneDegree (представленный я переменной в коде) Ивар вашего контроллера представления, поэтому она доступна во всех из его методов, а также в делегатских и исходных данных методов UITableView.
  2. Забудьте о setNeedsDisplay способ. Поскольку вы используете UITableView для отображения вашего контента, вам нужно играть по его правилам. Это означает, что вы должны использовать метод reloadSections:withRowAnimation:.
  3. Проверьте еще раз, если вам нужно self.undoneIcon. Я уверен, что собственность imageView должна сделать. То есть, если вы действительно хотите отобразить изображение в ячейке. Если вы хотите создать какой-то индикатор выполнения, управляя фоном ячейки, используйте свойство backgroundView или просто разместите UIProgressView в своей ячейке. Это то, что я думаю, что вы хотите сделать, посмотрев на свой код.
+0

Спасибо большое! ImageView работает, но проблема в том, что я сделал глупую ошибку в названии png ... haha –

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