Обновить свойство тега UITableViewCell после перемещения строки - PullRequest
1 голос
/ 03 января 2012

В моем приложении мне нужно иметь возможность отслеживать, из какой ячейки происходит UITextField, когда я фиксирую изменения редактирования в textFieldDidEndEditing:. Для этого я просто установил свойство тега в текстовом поле ячейки в tableview:cellForRowAtIndexPath:.

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

Я попытался исправить эту проблему, обновив тег в tableView:moveRowAtIndexPath:toIndexPath:

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
    NSString *siteToMove = [[sites objectAtIndex:[fromIndexPath row]] retain];

    [sites removeObjectAtIndex:[fromIndexPath row]];
    [sites insertObject:siteToMove atIndex:[toIndexPath row]];

    if ([toIndexPath section] == 1) {
        [[(BookmarkTextEntryTableViewCell *)[[self tableView] cellForRowAtIndexPath:toIndexPath] textField] setTag:[toIndexPath row]];
    }
}

Однако это не работает, потому что (BookmarkTextEntryTableViewCell *)[[self tableView] cellForRowAtIndexPath:toIndexPath] возвращает ячейку, которая была там до перемещения строки.

1 Ответ

1 голос
/ 03 января 2012

В вашем методе - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath вы можете выполнить итерацию всех UITextField, которые вы, возможно, добавили в таблицу как подвиды, а затем проверить и установить новый тег как-

for (UIView* subview in [[self tableView] subviews]) {
 if ([subview isKindOfClass:[UITextField class]]) {  
  if(subview.tag==oldTag){
    subview.tag = newTag;
    break;
  }
 }
}

РЕДАКТИРОВАТЬ: Если подумать, вы можете просто перезагрузить данные таблицы в случае, если сбрасывает все оставшиеся теги ячейки тоже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...