2013-07-23 57 views
0

我有一個UITableView,它具有2個不同的自定義UITableViewCell以及2個不同的唯一標識符。上一行的UITableViewCell內容在單元重新加載時仍然可見

我加載Load上的第一個自定義UITableViewCell,然後加載Cell Select上的第二個自定義UITableViewCell

我知道我的問題與我重複使用我的單元格的方式有關。但我試過使用

routineSearchSelectedResultCell * cell = (routineSearchSelectedResultCell*)[tableView dequeueReusableCellWithIdentifier:nil];並且結果是新的UITableViewCell是空的,並且屬性沒有被填充。

我也試過[[[cell contentView] subviews] makeObjectsPerformSelector: @selector(removeFromSuperview)];但給我同樣的結果。

我怎麼能解決這個問題?

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

    if (idp && idp.row == indexPath.row ) { 
     return [self tableViewRoutineSelectedResult:tableView cellForRowAtIndexPath:indexPath]; 
    } 

    NSString *cellIdentifier = @"routineSearchCell"; 
    routineSearchCell * cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 

    if (!cell) { 
     cell = [[routineSearchCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier]; 
    } 


    cell.routineName.text = _myDownloadedInfo[@"routines"][indexPath.row][@"routine"][@"routineName"]; 
    cell.routineAuthor.text = _myDownloadedInfo[@"routines"][indexPath.row][@"routine"][@"username"]; 

    return cell; 

} 
- (routineSearchSelectedResultCell *)tableViewRoutineSelectedResult:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    NSDictionary* myRoutine = _myDownloadedInfo[@"routines"][indexPath.row][@"routine"]; 

    [self sortOutRoutineImages:myRoutine[@"routineType"]]; 

    NSString *cellIdentifier = @"routineSearchSelectedResultCell"; 
    routineSearchSelectedResultCell * cell = (routineSearchSelectedResultCell*)[tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
    if (!cell) { 
     cell = [[routineSearchSelectedResultCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier]; 
    } 

    cell.label1.text [email protected]"test"; 
    cell.contentView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"BlackGradientSearch"]]; 
    cell = [self iconRoutineImagesController:cell]; 
    cell.imgInstruction.image = [UIImage imageNamed:@"InstructionSearchWhite"]; 
    cell.imgVideos.image = [UIImage imageNamed:@"VideoSearchWhite"]; 
    cell.routineName.text = myRoutine[@"routineName"]; 
    [cell.download setBackgroundImage:[UIImage imageNamed:@"DownloadSearchWhite"] forState:UIControlStateNormal]; 
    return cell; 
} 
- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    if (idp) { 
     NSIndexPath* pIdp = [[NSIndexPath alloc] init]; 
     pIdp = idp; 
     idp = indexPath; 
     [tableView beginUpdates]; 
     [tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft]; 
     [tableView reloadRowsAtIndexPaths:@[pIdp] withRowAnimation:UITableViewRowAnimationRight]; 
     [tableView endUpdates]; 
    } else { 
     idp = [[NSIndexPath alloc]init]; 
     idp = indexPath; 
     [tableView beginUpdates]; 
     [tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft]; 
     [tableView endUpdates]; 
    } 



} 

+0

這樣的IM假設你指定'IDP。行「的單元格選擇,然後調用'reloadData'? – KDaker

+0

我剛剛添加了'didSelectRowAtIndexPath'的代碼 –

+0

那麼究竟是什麼問題呢?從圖片看來,這個單元格正在加載。如果你重新加載,你是否期待它消失? – KDaker

回答

0

嘗試重寫

-(void)prepareForReuse 

如果一個UITableViewCell對象是可重複使用的,也就是說,它有一個複用標識符,該方法被調用之前從返回的對象UITableView方法dequeueReusableCellWithIdentifier :.出於性能考慮,您應該只重置與內容無關的單元格屬性,例如,alpha,編輯和選擇狀態。 tableView:cellForRowAtIndexPath:中的表視圖委託應該在重用單元時始終重置所有內容。如果單元對象沒有關聯的重用標識符,則不調用此方法。如果您重寫此方法,則必須確保調用超類實現。

看到document

0

我認爲你正在使用的標籤,它們是重疊.. 嘗試使用此,它可以幫助你..

for(UIView *view in cell.subviews){ 
    if([view isKindOfClass:[UILabel class]]){ 
    [view removeFromSuperview]; 
    } 
} 
相關問題