2012-01-22 99 views
2

我遇到了一些UITableView和reloadData方法的問題。uitableview reloaddata緩存?

我刷新tableView時點擊刷新按鈕與數據庫中的最後一個信息下降有序,所以最近的項目應該出現在第一個位置。

我的tableview中的每個單元格都被自定義標籤和uiimageviews填充。

嗯......事情是,當我按下刷新按鈕並找到新數據時,前5行(顯示屏中顯示的那些行)不會更新,但以下行會進行更新。但是,如果我按壓5個第一行中的任何一行,它們就會使用新數據正確調用tableView:didSelectRowAtIndexPath:方法。

所以,問題是前5行的tableview的「可視化」內容沒有被更新。

任何人都可以幫助我嗎?

謝謝!

代碼:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSString *CellIdentifier = [ NSString stringWithFormat: @"%d:%d", [ indexPath indexAtPosition: 0 ], [ indexPath indexAtPosition:1 ]]; 

    UITableViewCell *cell = [ tableView dequeueReusableCellWithIdentifier: CellIdentifier]; 

    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithFrame: CGRectZero reuseIdentifier: CellIdentifier] autorelease]; 

     // Configure the cell... 
     cell.accessoryType=UITableViewCellAccessoryDisclosureIndicator; 
     Activity *activity = [[self.activities valueForKey:[[[self.activities allKeys] sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)] objectAtIndex:indexPath.section]] objectAtIndex:indexPath.row]; 
     [email protected]""; 
     //Mostramos el nombre 
     UILabel *label= [[UILabel alloc] initWithFrame:CGRectMake(60, -5, 200, 34)]; 
     label.text = [activity name]; 
     label.font = [UIFont boldSystemFontOfSize:17]; 
     label.backgroundColor = [UIColor clearColor]; 
     [cell addSubview:label]; 
     [label release]; 

     //Mostramos la imagen 
     UIImageView *leftImage = [[UIImageView alloc] initWithFrame:CGRectMake(5, 3, 50, 50)]; 
     [cell addSubview:leftImage]; 


     UITextView *textView=[[UITextView alloc] initWithFrame:CGRectMake(60, 25, 200, 38)]; 
     textView.editable = NO; 
     textView.backgroundColor = [UIColor clearColor]; 
     textView.textColor = [UIColor grayColor]; 
     textView.font = [UIFont systemFontOfSize:12.0]; 
     textView.contentInset = UIEdgeInsetsMake(-8,-8,0,0); 
     textView.userInteractionEnabled=NO; 
     [cell addSubview:textView]; 

     switch ([activity notType]) { 
      case 0: 
       textView.text = [NSString stringWithFormat:NSLocalizedString(@"requestPUSH",@""),[activity name]]; 
       leftImage.image = [UIImage imageNamed:@"ios.png"]; 
       break; 
      case 1: 
       textView.text = [NSString stringWithFormat:NSLocalizedString(@"MPCreatedPushString",@""),[activity name],[activity nameItem]]; 
       leftImage.image = [UIImage imageNamed:@"mpNew.png"]; 
       break; 
      case 2: 
       textView.text = [NSString stringWithFormat:NSLocalizedString(@"MPUpdatedPushString",@""),[activity name],[activity nameItem]]; 
       leftImage.image = [UIImage imageNamed:@"mpUpdated.png"]; 
       break; 
      case 3: 
       textView.text = [NSString stringWithFormat:NSLocalizedString(@"MPDeletedPushString",@""),[activity name],[activity nameItem]]; 
       leftImage.image = [UIImage imageNamed:@"ios.png"]; 
       break; 
      case 4: 
       textView.text = [NSString stringWithFormat:NSLocalizedString(@"MPGuestConfirmationPUSHString",@""),[activity name],[activity nameItem]]; 
       leftImage.image = [UIImage imageNamed:@"attend.png"]; 
       break; 
      case 5: 
       if ([[activity message] isEqualToString:@"noData"]) { 
        textView.text = [NSString stringWithFormat:NSLocalizedString(@"ShoutPushString",@""),[activity name]]; 
       }else{ 
        textView.text = [NSString stringWithFormat:NSLocalizedString(@"ShoutPushStringWithData",@""),[activity name], [activity message]]; 
       } 
       UIImage *contactImage = [UIImage imageWithData:[[activity person] pic]]; 
       if (contactImage!=nil) { 
        leftImage.image = contactImage; 
        //redondeamos bordes 
        CALayer * l = [leftImage layer]; 
        [l setMasksToBounds:YES]; 
        [l setCornerRadius:5.0]; 
       }else{ 
        leftImage.image = [UIImage imageNamed:@"ios.png"]; 
       } 
       break; 
      case 6: 
       textView.text = [NSString stringWithFormat:NSLocalizedString(@"CheckinPushString",@""),[activity name],[activity nameItem]]; 
       leftImage.image = [UIImage imageNamed:@"ios.png"]; 
       break; 
      case 7: 
       textView.text = [NSString stringWithFormat:NSLocalizedString(@"MPGuestRejectionPUSHString",@""),[activity name],[activity nameItem]]; 
       leftImage.image = [UIImage imageNamed:@"reject.png"]; 
       break; 
      default: 
       break; 
     } 
     [leftImage release]; 
     [textView release]; 


     //Mostrar fecha 
     double timestamp = [[activity datetime] doubleValue]/1000; 
     NSString *dateShow; 

     NSDate *datetime = [NSDate dateWithTimeIntervalSince1970:timestamp]; 
     NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
     [dateFormat setDateFormat:@"HH:mm"]; 
     dateShow=[dateFormat stringFromDate:datetime]; 

     UILabel *label2= [[UILabel alloc] initWithFrame:CGRectMake(240, 0, 70, 20)]; 
     label2.text = dateShow; 
     label2.textAlignment = UITextAlignmentRight; 
     label2.font = [UIFont systemFontOfSize:12]; 
     label2.backgroundColor = [UIColor clearColor]; 
     label2.textColor = [UIColor blueColor]; 
     [cell addSubview:label2]; 
     [label2 release]; 

    } 

    return cell; 
} 
+0

也許你應該張貼你的創作代碼? – Tom

+0

添加代碼,並不少,呵呵!謝謝 – Ibai

回答

1

嗯,所以你給每一個小區的唯一小區標識符。你有這個理由嗎? 大多數人試圖通過這種方式來修補他們對iOS表格視圖的誤解...

當您重新載入表格時,此調用UITableViewCell *cell = [ tableView dequeueReusableCellWithIdentifier: CellIdentifier]; 會爲您提供一個可重用的單元格(已讀取已包含內容)。

但你的代碼只適用於「新鮮」細胞:if (cell == nil) { ,你只是不適合這種情況下,準備...

+0

哇!不知道,我不必重複使用這些單元格。這解決了我的問題! 非常感謝! – Ibai