2013-12-09 2 views
0

У меня есть табличное представление в моем приложении, которое имеет 6 строк, от первого до шестого. Пользователь вводит имена игроков и может удалять строки путем прокрутки и нажатия «Удалить». Я столкнулся с проблемой, когда в текстовом поле строки есть текст. Например, я заполняю текстовое поле первых трех строк «Один» - «Три». Если вы удалите строку 3 с надписью «Три», она удалит строку, но текст «Три» в текстовом поле войдет в строку внизу для «Четвертого игрока». Каков наилучший способ исправить это?Удаление содержимого UITextField при удалении строки из UITableView

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

    cell.playerLabel.text = [[_playerNames objectAtIndex:indexPath.row]objectForKey:@"title"]; 
    NSString *test = [NSString stringWithFormat:@"%@", cell.playerNameBox.text]; 
    cell.playerNameBox.tag = indexPath.row; 

    NSString *key = [NSString stringWithFormat:@"%ld", (long)indexPath.row]; 
    [[NSUserDefaults standardUserDefaults] 
    setObject:test forKey:key]; 

    return cell; 
} 

Удаление строки:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (editingStyle == UITableViewCellEditingStyleDelete) 
    { 
     [_playerNames removeObjectAtIndex:indexPath.row]; 
     [Table reloadData]; 

    } 
} 

Количество строк в секции = 6

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    // Return the number of rows in the section. 
    return _playerNames.count; 
} 
+0

Предполагая, что у вас есть собственный класс для вашей ячейки, в методе 'prepareForReuse', установите текстовое поле в' nil'. – bobnoble

+0

Выполнение этого удаления текста в каждом текстовом поле. Есть ли способ просто удалить текст в текстовом поле этой строки? –

ответ

1

В вашем методе "cellForRowAtIndexPath", вы не проверяя должным образом для нулевой объект случае ,

Вместо:

cell.playerLabel.text = [[_playerNames objectAtIndex:indexPath.row]objectForKey:@"title"]; 

Do:

NSString *title = [[_playerNames objectAtInex:indexPath.row] objectForKey:@"title]; 
cell.playerLabel.text = (title ? title : @""); // set the label to either title or the empty string 

Я подозреваю, что это происходит, что вы не правильно сбросить текстовую метку при перегрузке или повторное использование.

Но в любом случае, вместо перезагрузки данных, почему бы не быть супер крутым и удалите строку, которая была отмечена для удаления.

т.е .:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (editingStyle == UITableViewCellEditingStyleDelete) 
    { 
     [_playerNames removeObjectAtIndex:indexPath.row]; 
     [tableView deleteRowsAtIndexPaths: [NSArray arrayWithObject: indexPath] withRowAnimation: UITableViewRowAnimationLeft]; 
    } 
} 

Другой FYI:

Я заметил, что ты был:

[Table reloadData]; 

в вашем коде. Рекомендации для Objective-C: не введите свои переменные экземпляра заглавными буквами. Это должно быть нечто более наглядное, например «itemTable».

+0

Это сработало. Я никогда не использовал представления таблиц, прежде чем я все еще изучаю, как они работают. В процессе переименования переменных экземпляра. –

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