2012-01-22 3 views
2

У меня возникли проблемы с UITableView и методом reloadData.uitableview reloaddata cache?

Я обновляю таблицуView при нажатии кнопки обновления с последней информацией в базе данных, упорядоченной по убыванию, поэтому самые последние элементы должны отображаться в первой позиции.

Каждая ячейка в моем табличном виде заполняется пользовательскими ярлыками и изображениями uiimageviews.

Хорошо, дело в том, что при нажатии этой кнопки обновления и новых данных первые 5 строк (которые отображаются на дисплее) не обновляются, но следующие строки , Однако, если я нажимаю на любую из 5 первых строк, они правильно вызывают метод tableView: didSelectRowAtIndexPath: с новыми данными.

Таким образом, проблема заключается в том, что «визуальное» содержимое таблицы в первых 5 строках не обновляется.

Любой может мне помочь?

Спасибо!

Код:

- (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

Код добавил, его немного, хе-хе! Thanks – Ibai

ответ

1

Хм, так что вы даете каждой ячейке уникальный идентификатор соты. У вас есть причина для этого? В основном люди пытаются исправить свое непонимание таблиц iOS таким образом ...

При перезагрузке таблицы этот вызов UITableViewCell *cell = [ tableView dequeueReusableCellWithIdentifier: CellIdentifier]; доставит вам ячейку для повторного использования (чтение уже содержит контент).

Но ваш код работает только для «свежих» клеток: if (cell == nil) { , вы просто не готовы для этого случая ...

+0

Wow! Не знал об этом, мне не нужно повторно использовать ячейки. Это решило мою проблему! Большое спасибо! – Ibai

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