2015-01-09 3 views
0

Я разрабатываю приложение для iOS, ориентированного на iOS 7.0 и более поздних версий. Теперь, мой вопрос заключается в том, как перезагрузить строки UITableView, которые видны на экране. Я использую динамические ячейки.Перезагрузка Активные ячейки tableview

Фактически при выборе варианта я меняю цвет, как цвет заголовка каждой ячейки, но те ячейки, которые уже загружены на экран, не меняются, и если я загружаю целую таблицу, то это занимает много времени.

Ожидание для вашего ответа.

Код

// по нажатию этой кнопки цвет обновляет

- (IBAction)btnDone:(id)sender { 

appDel.selectedMood=_moodDetView.str; 

appDel.barColor=_moodDetView.backgroundColor; 

self.navigationController.navigationBar.barTintColor = _moodDetView.backgroundColor; 

//[self.mainTblView reloadData]; 

[self.menuView setBackgroundColor:appDel.barColor]; 

[_moodDetView setHidden:YES]; 

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath  *)indexPath 
    { 
    //For menu contents 
    if (tableView.tag==2) { 
     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"]; 
     if (cell == nil) { 
      cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"]; 
      cell.textLabel.textColor = [UIColor whiteColor]; 
      cell.textLabel.font = [UIFont fontWithName:@"Futura" size:14.0]; 
      cell.textLabel.textAlignment = NSTextAlignmentCenter; 
      cell.backgroundColor = [UIColor clearColor]; 
     } 

     switch (indexPath.row) { 
      case 0: 
      { 
       [email protected]"Select Mood"; 
      } 
       break; 
      case 1: 
      { 
       [email protected]"Search by Author"; 
      } 
       break; 
      case 2: 
      { 
       [email protected]"Search by Category"; 
      } 
       break; 
      case 3: 
      { 
        [email protected]"Favorites"; 
      } 
       break; 
      case 4: 
      { 
        [email protected]"Feeds"; 
      } 
       break; 

      default: 
       break; 
     } 
     return cell; 
    } 

    //for main table 
    else{ 

    // Configure the cell... 

    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

    FeedCustomCell* CELL=(FeedCustomCell *)cell; 

    CELL.cellImageView.layer.cornerRadius=CELL.cellImageView.frame.size.width/2; 

    CELL.cellImageView.clipsToBounds=YES; 

    CELL.gesRec=[[CustomTapGestureRecognizer alloc]initWithTarget:self action:@selector(authorBtnTouched:)]; 

    [CELL.lblAuthName setTextAlignment:NSTextAlignmentJustified]; 

    [CELL.lblAuthName setTextColor:[AppDelegate invertColor:appDel.barColor]]; 

     NSString * str=[NSString stringWithFormat:@"%@",[[dataArray objectAtIndex:indexPath.row] objectForKey:@"authorId"]]; 

    UIImage * img=[UIImage imageNamed:str]; 

    CELL.cellImageView.image=img?img:[UIImage imageNamed:@"n3"]; 

    [CELL.lblAuthName addGestureRecognizer:CELL.gesRec]; 

    CELL.gesRec.authorImage=CELL.cellImageView.image; 

    NSString * authName=[[dataArray objectAtIndex:indexPath.row] objectForKey:@"authorName"]; 

    [CELL.lblAuthName setText:authName]; 

    [CELL.gesRec setAuthorId:(int)str.integerValue]; 

    [CELL.gesRec setAuthorName:authName]; 

    [CELL.txtViewQuote setTextColor:appDel.barColor]; 

    CELL.txtViewQuote.text=[[dataArray objectAtIndex:indexPath.row] objectForKey:@"quoteTxt"]; 

    CGSize sizeThatShouldFitTheContent = [CELL.txtViewQuote sizeThatFits:CELL.txtViewQuote.frame.size]; 

    CELL.heightConstraintOfTxtView.constant = sizeThatShouldFitTheContent.height; 

    [CELL.contentView sizeToFit]; 

    return CELL; 

    } 


} 

С уважением: Сайед Meesum Али

Младший разработчик программного обеспечения

+0

Не могли бы вы показать свой код? Как и одно использование для перезагрузки ячейки, которая не работает, и ': tableView: cellForRowAtIndexPath:'? – Larme

+0

Я не перезагружаю ryt сейчас, как при ее прокрутке он автоматически вносит изменения, поскольку используются повторно используемые ячейки. –

+0

Возможный дубликат [iOS - таблица обновления UITableView правильно?] (Http://stackoverflow.com/questions/7801320/ios-uitableview-refresh-table-properly) – n00bProgrammer

ответ

0

Самый простой способ сделать это будет:

[myTable reloadRowsAtIndexPaths:myTable.indexPathsForVisibleRows withRowAnimation:UITableViewRowAnimationAutomatic]; 

Однако, поскольку вы ищете более оптимизированным образом, следующая будет лучше:

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

- (IBAction)btnDone:(id)sender { 

    for (UITableViewCell* cell in yourTable.visibleCells) { 

     if ([cell isKindOfClass:[FeedCustomCell class]]) { 

      [((FeedCustomCell*)cell).lblAuthName setTextColor:[AppDelegate invertColor:appDel.barColor]]; 
     } 
    } 
} 

Это должно быть путь быстрее, что перегрузочные (рисунок) все видимые элементы.

ТАКЖЕ, слово консультации. Используйте разныеreuseIdentifer s для разных типов ячеек, иначе ваша таблица может привести к сбоям приложений.

+0

Спасибо! Это то, что я искал. Еще раз спасибо. Можете ли вы сказать мне, какая часть этого кода сделала его настолько оптимизированным? Логика позади него. –

+1

Хорошо, я думаю, вместо перезагрузки всего UITableViewCell мы просто получаем доступ к его атрибуту и ​​меняем его. (Y) –

+0

Да, все. – n00bProgrammer

0

Если вы реализуете пользовательское подклассов ячеек UITableViewCell, вы можете реализовать метод prepareForReuse. Вы можете сбросить некоторые свойства, например альфа, состояние выбора в этом методе.

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