2013-10-25 6 views
0

Я добавил uitableview, в котором я пытаюсь добавить пользовательский UIButton. Он успешно добавлен с этим кодом:Обновить содержимое uitableview

image=[UIButton buttonWithType:UIButtonTypeCustom]; 
    image.frame=CGRectMake(240, 7, 25, 25); 
    image.tag=101; 


    image2=[UIButton buttonWithType:UIButtonTypeCustom]; 
    image2.frame=CGRectMake(240, 7, 25, 25); 
    image2.tag=102; 

    if ([outputlabel.text isEqualToString:@"Yes"]||[outputlabel.text isEqualToString:@"Yes"]) { 
     [image setImage:[UIImage imageNamed:@"tick.png"] forState:UIControlStateNormal]; 
     [cell1.contentView addSubview:image]; 
     [cell1.contentView bringSubviewToFront:image]; 
    } 
    else 
    { 
     [image2 setImage:[UIImage imageNamed:@"cross.png"] forState:UIControlStateNormal]; 
     [cell1.contentView addSubview:image2]; 
     [cell1.contentView bringSubviewToFront:image2]; 
    } 

Его работа в порядке в первую очередь. При перезагрузке таблицы он перекрывает старое изображение uibutton. Я не могу обновить всю таблицу новыми значениями. У кого-то есть идея, что я делаю неправильно в коде.

enter image description here

+0

Попробуйте использовать [cell1.contentView setNeedsDisplay: True] каждый раз, когда вы установили изображение, чтобы обновить ячейку – Neha

ответ

2

Обновлено. Всегда создавайте представление содержимого для ячейки в cell == nil block. Используйте этот contentview снаружи тега .. Только тогда это обыкновение пересекаться и использовать ур ячейку отлично ..

if (cell == nil) 
{ 

cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIndentifier]; 

//Add your button here.. set the tag. 
    UIButton image=[UIButton buttonWithType:UIButtonTypeCustom]; 
    image.frame=CGRectMake(240, 7, 25, 25); 
    image.tag=101; 
} 


    UIButton *btn = (UIButton *)[cell.contentView viewWithTag:101]; 

    if ([outputlabel.text isEqualToString:@"Yes"]||[outputlabel.text isEqualToString:@"Yes"]) 
     { 
       [btn setImage:[UIImage imageNamed:@"tick.png"] forState:UIControlStateNormal]; 
      } 
      else 
      { 
       [btn setImage:[UIImage imageNamed:@"cross.png"] forState:UIControlStateNormal]; 
      } 

Просто делать, как это в cellForRowAtIndexPath .. Это будет полезно для вас ..

+0

не работает @TamilKing –

+0

@MinkleGarg: Позвольте мне знать, что вы получили ошибку? Затем вы помещаете полное кодирование cellForRowAtIndexPath и там, где вы [yourTableView reload] также ставите этот метод. Затем, пожалуйста, скажите, почему вы используете две кнопки, используйте одну кнопку, чтобы изменить изображение этой кнопки. Я обнов свой код так, как это – TamilKing

+0

@MinkleGarg: Попробуйте это наверняка это сработает для вас .. – TamilKing

0

Убедитесь, что вы реализуете -cellForRowAtIndexPath :. Затем обновите tableViewCells, вызвав reloadRowsAtIndexPaths: withRowAnimation: в рассматриваемом tableView. TableView в свою очередь вызовет cellForRowAtIndexPath, и вы просто вернете настроенные ячейки там.

Если у вас есть статические ячейки, вы можете просто получить доступ к тем, что вам нужно изменить, подключив элементы управления до IBOutlet.

2

В принципе, если мы хотим ссылаться на содержимое таблицы, а затем использовать эту reloadData. Пробовали ли вы: -

[yourTableView reloadData]; 
+0

Yup Я сделал это .. текст обновляется отлично, но возникают проблемы с изображениями –

+0

В чем проблема с изображениями, которые вы получаете? –

+0

Получается перекрытие. Предположим, что сначала tym с индексом 0, было изображение tick.png в соответствии с массивом. И представление стола отлично. Но если второй раз, если индекс 0 содержит изображение cross.png, то прежнее изображение остается тем же самым местом, и добавлено второе изображение. –

0

Попробуйте обновить вид вашей ячейки с помощью

[cell1.contentView setNeedsDisplay:TRUE]; 

каждый раз, когда вы установите изображение.

0

Я подозреваю, что вы добавляете это изображения в -tableView:cellForRawAtIndexPath: метода.

Прежде всего - если вы повторно используете ячейку с некоторым идентификатором повторного использования, ячейка останется в памяти и будет использоваться повторно, когда это необходимо. Это означает, что все дочерние элементы вашей ячейки будут сохранены. В этом случае вам нужно подготовить ячейку для повторного использования каждый раз. Например - удалите все подвидные элементы ячейки.

Но лучше, я рекомендую в случае меньшего количества операций - создать подкласс UITableViewCell и добавить UIButton в качестве свойства этой ячейки.

Тогда вам нужно будет изменить это свойство в зависимости от вашего состояния.

if ([outputlabel.text isEqualToString:@"Yes"]) { 
    [cell1.button setImage:[UIImage imageNamed:@"tick.png"] forState:UIControlStateNormal]; 
} 
else 
{ 
    [cell1.image setImage:[UIImage imageNamed:@"cross.png"] forState:UIControlStateNormal]; 
} 

Конечно, кнопка должна быть добавлена ​​в cell.contentView в инициализаторе ячейки. Обычно это метод -initWithStyle:reuseIdentifier: вашего пользовательского файла .m.

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