2016-01-19 3 views
1

Я работаю с tableviews в iOS. Повторно используемые ячейки перезагружаются при прокрутке.iOS scrolling tableView reusable cells reload

Итак, при обновлении, например, textfields внутри ячейки, она исчезает после прокрутки. Я решил это, используя Array, который сохраняет все тексты во всех ячейках, но мне интересно, есть ли лучший способ решить эту проблему.

Спасибо.

+0

Непонятно, какова ваша проблема, что вы подразумеваете под этим: 'оно исчезло после прокрутки? –

+0

Использование Custom Cell класс решит его – Mayur

+1

@RASS, когда я прокручу вниз, ячейка исчезает, поэтому я сохраняю его данные внутри массива, чтобы восстановить его, когда снова прокручиваю страницу. – Sob7y

ответ

0

Что вы описываете, так это то, как настольные работы предназначены для работы! Tableview представляет собой дисплей, а не магазин, а многоразовые клетки только те, в настоящее время отображаются

Вы правильно использовать массив (или коллекцию) для хранения данных и использовать только Tableview, чтобы отобразить его

0

для управления памятью (для освобождения памяти) tableview удалить ячейку памяти, которая не отображается на текущем экране, сохранить только те ячейки памяти, которые в настоящее время отображаются на экране, поэтому вам нужно сохранить этот текст отдельно от tableview.

0

Вы можете быть из-за многопоточности. Если вы перегрузочные данные операции НОД или любой NSOperation (разные нити), то вы должны использовать следующий код, чтобы получить дескриптор основного потока

dispatch_sync(dispatch_get_main_queue(), ^{ 
//perform the reload activity 
}); 
0

Использование массива строк вы должны хранить данные всех текстовых полей в таблице. Используйте методы делегата UITableView для более эффективного внедрения.

-(void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { 
    MyCell * mc = (MyCell *) cell; 
    names[indexPath.row] = mc.myTf.text; 
} 

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { 
    MyCell * mc = (MyCell *) cell; 
    mc.myTf.text = names[indexPath.row]; 
} 

Здесь MyCell обычай клетка, которая имеет UITextField. name [] - массив NSString, объявленный в классе, например NSString * names[20].

0

Да вы делаете правильно, так как клетки повторно вам необходимо сохранить данные, что-то вроде этого -

1. Имейте массив для хранения ваших данных.

2. Обновляйте свой массив всякий раз, когда вы вносите изменения в свои текстовые поля, чтобы ваш пользовательский интерфейс и данные были синхронизированы.

  1. Используйте этот массив, чтобы заполнить таблицуView.
0

Вам необходимо определить cellIdentifier как уникальный. Затем каждая ячейка создается с уникальным идентификатором.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
     NSString *CellIdentifier = [NSString stringWithFormat:@"Cell%dR%d",indexPath.section,indexPath.row]; 
     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
     if(cell == nil) 
     { 
      cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier]; 

      //your logic here 
     } 


     return cell; 
    } 
Смежные вопросы