2013-04-15 5 views
1

Мой рабочий стол отлично работает, когда он не находится в режиме редактирования. Все ячейки отображаются, как ожидалось, но если я войду в режим редактирования и прокрутку, ячейки, которые перерисовываются в режиме редактирования, имеют неправильный контент. В моей функции, которая отключает редактирование, я перезагружаю данные таблицы, и она снова отображается правильно.Неверное содержимое UITableViewCell при редактировании и прокрутке

Здесь соответствующий код.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath 
{  
static NSString *CellIdentifier = @"Cell"; 
UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:nil]; 

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


FieldItemDecrypted *theField = [decryptedArray objectAtIndex:indexPath.row]; 




    // Configure the cell... 

     cell.textLabel.text = [[NSString alloc] initWithData:theField.field encoding:NSUTF8StringEncoding]; 
     cell.detailTextLabel.text = [[NSString alloc] initWithData:theField.type encoding:NSUTF8StringEncoding];  


return cell; 
} 

И мой код для редактирования:

- (IBAction)editRows:(id)sender 
{ 

if ([self.tableView isEditing]) 
{ 
    [self.tableView setEditing:NO animated:YES]; 
    [self.tableView reloadData]; 
} 
else 
{ 
    [self.tableView setEditing:YES animated:YES]; 
} 

} 

Должно выглядеть так:

enter image description here

но выглядит это после прокрутки при редактировании:

enter image description here

+0

Кроме того, я попытался добавить этот код в ячейке для строки в методе indexpath: NSLog (@ "позиция =% @ поле =% @ », theField.position, theField.field); В отладчике он отображается правильно, как будто он находится в очереди на правильную ячейку, но не отображается правильно. –

+0

когда именно эта ошибка происходит? Поэтому, если вы начнете редактировать его, это нормально, но если вы прокручиваете во время редактирования, вы получаете это число «1» в цифрах? – Novarg

+0

Точно, но я не думаю, что это добавляет один, я думаю, что он перерабатывает ячейки со дна стола, так что это 15, 14, 13 12 и т. Д. –

ответ

3

Сначала вы инициализируете объект UITableViewCell, а затем удаляете его из представления таблицы? Это неверно.

Try:

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

if(cell == nil) 
{ 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; 
} 

Я просто попытался это на демо-проект, и он ведет себя так, как ожидалось.

+0

Пробовал это, но проблема все еще сохраняется. –

+0

Стивен, пожалуйста, см. Редактирование. Вы не инициализировали свои ячейки идентификатором. Я просто попробовал демонстрационный проект, и все работает так, как ожидалось. –

+2

Хорошо, обнаружил ошибку. У меня на самом деле был другой оператор if в cellforrowatindex, который проверял, был ли он в режиме редактирования, метка была назначена внутри оператора if вместо внешнего. Не знаю, как я пропустил это, спасибо за помощь. –

1

Я больше знаком с этим типом повторного использования клеток:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath 
{  
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (!cell) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle 
             reuseIdentifier:nil]; 
    } 
    FieldItemDecrypted *theField = [decryptedArray objectAtIndex:indexPath.row]; 
    // Configure the cell... 

    cell.textLabel.text = [[NSString alloc] initWithData:theField.field encoding:NSUTF8StringEncoding]; 
    cell.detailTextLabel.text = [[NSString alloc] initWithData:theField.type encoding:NSUTF8StringEncoding];  


    return cell; 
} 
+0

Что именно вы изменили, кроме того, что я предложил в своем ответе? –

+0

Я дал ему копию того, как его метод будет выглядеть в нашей системе. И это метод, который работает надлежащим образом в моей системе, поэтому я знаю, что если это не сработает для него, у него должна быть проблема в другом месте, которая его вызывает. – HalR

+0

Но ваша копия - это копия с его вопросом с моим предложением исправить. Что еще изменилось? –

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