2013-12-09 6 views
0

Я создал ячейку, которую можно развернуть и свернуть, когда ячейка расширяется. Я добавляю 2 поднабора и удаляю эти 2 поднабора, когда ячейка рушится. Посмотрите на код:Как удалить предыдущий subview и добавить новый subview в UITableviewCell

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    if(selectedIndex == indexPath.row){ 
     selectedIndex = -1; 

     UITableViewCell *cell = [self.tblView cellForRowAtIndexPath:indexPath]; 
     [[cell viewWithTag:TAG_KHMER] removeFromSuperview]; 
     [[cell viewWithTag:TAG_KOREAN] removeFromSuperview]; 

     //[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 

     [self.tblView beginUpdates]; 
     [self.tblView endUpdates]; 

     return; 
    } 

    if(selectedIndex >= 0){ 
     NSIndexPath *previousPath = [NSIndexPath indexPathForRow:selectedIndex inSection:0]; 
     selectedIndex = indexPath.row; 
     UITableViewCell *cell = [self.tblView cellForRowAtIndexPath:previousPath]; 
     [[cell viewWithTag:TAG_KHMER] removeFromSuperview]; 
     [[cell viewWithTag:TAG_KOREAN] removeFromSuperview]; 
     //[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
    } 

    VocabularyController *vc = [self.vocabularyInfo objectAtIndex:indexPath.row]; 
    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; 

    UILabel *khmerLabel = [[UILabel alloc] init]; 
    khmerLabel.text = vc.khmer; 
    khmerLabel.font = [UIFont fontWithName:@"Hanuman" size:17]; 
    [khmerLabel setNumberOfLines:0]; 
    khmerLabel.tag = TAG_KHMER; 
    khmerLabel.frame = CGRectMake(20, 45, 300, 300); 

    UILabel *koreanPro = [[UILabel alloc] init]; 
    koreanPro.text = vc.korean; 
    [koreanPro setNumberOfLines: 0]; 
    koreanPro.tag = TAG_KOREAN; 
    koreanPro.frame = CGRectMake(20, 315, 300, 300); 

    [cell addSubview:khmerLabel]; 
    [cell addSubview:koreanPro]; 

    selectedIndex = indexPath.row; 

    //[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 

    [self.tblView beginUpdates]; 
    [self.tblView endUpdates]; 

} 

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

Может ли кто-нибудь помочь мне, как правильно отобразить его.

enter image description here

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

enter image description here

ответ

2

Не пытайтесь добавить подвидов так - это будет приводить к путанице, потому что, как вы выяснили UITableView перерабатывает клетки.

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

В принципе, не добавляйте subviews в свои ячейки в вызове делегата/источника данных в таблице. Создайте собственный подкласс, и вы найдете все намного, намного проще.

+0

Мое произведение почти сделано. Я создал пользовательский UITableViewCell и поместил 3 ярлыка в ячейку, как вы можете видеть на картинке. Но одна вещь, которую я пытаюсь исправить: Второй ярлык содержит длинную строку (например: около 3 строк), и я пытаюсь изменить ее, но это не изменилось. и третий лейбл все еще остается тем же, где и был. Фактически, высота 2-й метки должна быть больше, и после нее должна быть 3-я метка. Можете ли вы рассказать мне, как решить эту проблему? Большое вам спасибо. –

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