2013-09-06 1 views
0

У меня есть пользовательский UITableViewCell. У меня есть UIImageView поверх UIButton. Теперь, когда я нажимаю UIButton, я могу переключить изображение UIImageView что-то похожее на переключатель.UIImageView в пользовательском UIITableViewCell не переключается при перезагрузке

Проблема заключается в том, что когда я переключаю его в состояние «ДА», на сервере происходит вызов, который вносит необходимые изменения. Теперь, когда я перезаряжаю таблицу, UIImageView не переходит в состояние «ДА». Я установил состояние UIButton в «Selected», и это работает нормально. Но UIImageView не меняется на новое изображение.

На обновление я получаю это: enter image description here

Когда я на самом деле хочу это: enter image description here

состояние по умолчанию это: enter image description here

Обновленное состояние и состояние по умолчанию UIImageView является одна и та же.

Здесь круглый значок является UIImageView, а остальное является UIButton

Это то, что я пытаюсь сделать:

В обычае UITableViewCell:

- (void)setSelected:(BOOL)selected animated:(BOOL)animated 
{ 
    self.karmaLogo = [[UIImageView alloc] initWithFrame:CGRectMake(self.karmaButton.frame.size.width - 40, 8, 30, 30)]; 
    [self.karmaLogo setImage:[UIImage imageNamed:@"logo-grey"]]; 
    self.karmaLogo.userInteractionEnabled = NO; 
    [self.karmaButton addSubview:self.karmaLogo]; 
} 

И в делегат UITableView:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // Creates the required custom cell 
    if (karmaCheck == 1) // Received from the server 
    { 
     cell.karmaButton.highlighted = YES; 
     cell.karmaButton.selected = YES; 
     cell.karmaLogo.image = nil; 
     [cell.karmaLogo setImage:[UIImage imageNamed:@"logo-black"]]; 
     [cell.karmaLogo setNeedsDisplay]; 
     [cell bringSubviewToFront:cell.karmaLogo]; 
    } 
    else 
    { 
     cell.karmaButton.highlighted = NO; 
     cell.karmaButton.selected = NO; 
     cell.karmaLogo.image = nil; 
     [cell.karmaLogo setImage:[UIImage imageNamed:@"logo-grey"]]; 
     [cell.karmaLogo setNeedsDisplay]; 
     [cell bringSubviewToFront:cell.karmaLogo]; 
    } 

Выполнение вводит оба блока if и else как и когда требуется, но не меняет изображение. Но подсветка и выбор karmaButton (UIButton) отлично работают.

+0

попытайтесь установить изображение в ничего, затем установив изображение на черный – heinst

+0

Does not cell.karmaLogo.image = nil; имеют такой же эффект? – Anil

+0

В теории да, но попробуйте '[cell.karmaLogo setImage: nil]]; вместо этого посмотрим, что получится – heinst

ответ

1

согласно вам заявление «когда я перезагрузке таблицы, изменения оленьей кожи UIImageView к„YES“состоянию.»

Это происходит потому, что всякий раз, когда вы загрузите таблицу вашего - (void)setSelected:(BOOL)selected animated:(BOOL)animated вызывается, в котором вы явно устанавливая изображение в ImageView с помощью [self.karmaLogo setImage:[UIImage imageNamed:@"logo-grey"]];

Так что ваша условной проверки в - (void)setSelected:(BOOL)selected animated:(BOOL)animated вместо cellForRowAtIndexPath:(NSIndexPath *)indexPath

+0

Большое спасибо! Это помогло решить проблему – Anil

0

Вы добавляете изображение как подпункт кнопки, поэтому изображение выделяется при нажатии кнопки. Причина, по которой я вижу проблему, связана с ошибкой в ​​UIImageView, когда вы явно не задали выделенное изображение. Таким образом, вместо того, переключая изображение, попробуйте сделать это за пределы вашего if-else блока:

[cell.karmaLogo setImage:[UIImage imageNamed:@"logo-grey"]]; 
[cell.karmaLogo setHighlightedImage:[UIImage imageNamed:@"logo-black"]]; 
Смежные вопросы