2013-02-17 2 views
0

Я пытаюсь изменить изображение внутри своего стола. Я использую [myTableView reloadData]; в другом методе (который запускается), чтобы обновить мой TableView, и я вижу, что другие элементы в представлении таблицы освежают, но изображение остается неизменным. Что мне не хватает?Не удается обновить изображение внутри UITableView

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

    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    UILabel *lblName; 
    UIImageView *checkMark = [[UIImageView alloc] initWithFrame:CGRectMake(230, 0, 30, 50)]; 
    if (cell == nil) { 

     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
       cell.selectionStyle = UITableViewCellSelectionStyleNone; 
     UIView *backgroundView = [[UIView alloc] initWithFrame:CGRectMake(10, 1, 260, 70)]; 
     backgroundView.backgroundColor = UIColorFromRGB(0x000000, 0.3); 
     backgroundView.userInteractionEnabled = YES;   

     checkMark.image = [UIImage imageNamed:@"V.png"]; 
     checkMark.contentMode = UIViewContentModeCenter; 
     checkMark.backgroundColor = [UIColor clearColor]; 
     [backgroundView addSubview:checkMark]; 
     [checkMark release]; 

     [cell.contentView addSubview:backgroundView]; 
     [backgroundView release]; 
    } 
    if (something) 
    { 
     checkMark.image = [UIImage imageNamed:@"halfleft.png"]; 
     NSLog(@"something was done"); 
    } 
    return cell; 

} 
+1

последний «}» перед «, если (что-то) 'должно быть перемещено прямо под' cell = [[[UITableViewCell alloc] initWithStyle: UITableViewCellStyleDefault reuseIdentifier: CellIdentifier] autorelease]; ' – Groot

+0

Почему? Я не хочу продолжать добавлять subview, если ячейка не равна нулю. – Segev

+1

Но вам нужно новое изображение, чтобы появиться на той же самой ячейке? поэтому вы просто создаете только ячейку, если она равна нулю. Каждая другая вещь должна быть вне (cell == nil) блока. – Piyuesh

ответ

1

reloadData правильно называет этот метод.

Ваша проблема проста, указатель на «checkMark» не подходит в случае, если ячейка «повторно используется». Сделайте что-то вроде этого:.

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

    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    UIView *backgroundView; 
    UIImageView *checkMark; 
    if (cell == nil) { 

     checkMark = [[UIImageView alloc] initWithFrame:CGRectMake(230, 0, 30, 50)]; 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
     cell.selectionStyle = UITableViewCellSelectionStyleNone; 
     backgroundView = [[UIView alloc] initWithFrame:CGRectMake(10, 1, 260, 70)]; 
     backgroundView.backgroundColor = UIColorFromRGB(0x000000, 0.3); 
     backgroundView.userInteractionEnabled = YES; 
     backgroundView.tag = 555; 

     checkMark.image = [UIImage imageNamed:@"V.png"]; 
     checkMark.contentMode = UIViewContentModeCenter; 
     checkMark.backgroundColor = [UIColor clearColor]; 
     checkMark.tag = 666; 
     [backgroundView addSubview:checkMark]; 
     [checkMark release]; 

     [cell.contentView addSubview:backgroundView]; 
     [backgroundView release]; 
    } else { 
     backgroundView = (UIImageView *)[cell.contentView viewWithTag:555]; 
     checkMark = (UIImageView *)[backgroundView viewWithTag:666]; 
    } 
    if (something) 
    { 
     checkMark.image = [UIImage imageNamed:@"halfleft.png"]; 
     NSLog(@"something was done"); 
    } 
    return cell; 

} 

Но, вы должны сделать что-то более простое (менее подвиды, если это возможно или подкласс UITableViewCell иметь указатель на галочкой ;-)

+0

Ваш код работает, но есть повторяющийся ответ. Я вижу, что «checkMark.image» также добавляется и в другие ячейки. Кроме того, не могли бы вы объяснить, для чего здесь используется тег? – Segev

+0

Я не знаю, как ваш код должен работать. Но избегайте любого .image в создании ячейки (в if (cell == nil) {}). Теги позволяют идентифицировать представления и поэтому вы можете найти их, когда они будут повторно использованы. Поэтому удалите любой «динамический» контент из if (cell == nil) и сделайте это в коде после :-) – Vinzius

+0

Проблема в том, что если я добавляю subviews вне ячейки == nil, все становится медленным и не реагирует после нескольких свитков UITableView , Это должно произойти? Может быть, это связано с тем, что я никогда не выпускаю myTable в viewDidLoad (другая проблема у меня есть). – Segev

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