Динамически отображать изображение в UITableViewCell - PullRequest
0 голосов
/ 14 февраля 2012

У меня есть UITableViewCell, он отключен от прокрутки и имеет фиксированные секции и строки.

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

TableView для пользователей, чтобы сделать выбор.

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

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

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

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

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

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

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

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

[myImage setNeedsDisplay] для просмотра, выделенного вручную,

или

[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];
}

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

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

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

Я даже пытался поставить коды, которые решают, какой png установить в

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

, но он может только отображать первый png без каких-либо обновлений.

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

1 Ответ

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