2013-12-09 125 views
0

我創建的細胞,可以展開和摺疊,當電池擴展I加2子視圖,當細胞處於摺疊狀態刪除這些子視圖2。看看代碼:如何刪除以前的子視圖,並添加新的子視圖的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,也可以完全使用代碼創建自定義子類(無論您最喜歡哪個)。

基本上,不要在您的表視圖委託/數據源調用中爲您的單元添加子視圖。創建一個自定義的子類,你會發現一切,更容易。

+0

我的工作差不多完成了。 我已經創建了自定義UITableViewCell並將3標籤放入單元格中,如圖所示。 但有一件事,我試圖解決的是: 第2標籤包含長字符串(如:它有大約3行),我試圖改變它的框架,但它的高度沒有改變。第三個標籤仍然保持不變。 實際上,第二個標籤高度必須更大,第三個標籤必須在此之後。 你能告訴我如何解決這個問題嗎? 非常感謝。 –

相關問題