UiTextField в UITableViewCell становится пустым при прокрутке - PullRequest
1 голос
/ 04 августа 2011

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

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    NSInteger section = [indexPath section];
    NSInteger row = [indexPath row];

    NSInteger identifier = row + ((section + 1) * 10);

    NSString *CellIdentifier = [NSString stringWithFormat:@"CustomCellIdentifier-%d",identifier];

    LoginTableViewCell *cell = (LoginTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)    {
        NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"LoginTableViewCell" owner:self options:nil];
        cell = [topLevelObjects objectAtIndex:0];

        cell.field.tag = identifier;

        if (section == 0) {

            switch (row) {
                case 0:{
                    NSString *user = [[NSUserDefaults standardUserDefaults] valueForKey:@"username"];
                    cell.field.text = user;
                    cell.label.text = @"User";
                    break;
                }
                case 1:{
                    NSString *bundleName = [[NSBundle mainBundle] bundleIdentifier];
                    NSError *error = nil;
                    NSString *user = [[NSUserDefaults standardUserDefaults] objectForKey:@"username"];
                    NSString *pwd = [SFHFKeychainUtils getPasswordForUsername:user andServiceName:bundleName error:&error];
                    cell.field.text = pwd;
                    cell.field.secureTextEntry = YES;
                    cell.label.text = @"Password";
                    break;
                }
                case 2:{
                    NSString *numero = [[NSUserDefaults standardUserDefaults] valueForKey:@"numero"];
                    cell.field.text = numero;
                    cell.field.keyboardType = UIKeyboardTypePhonePad;
                    cell.label.text = @"Number";
                    break;
                }
                default:
                    break;
            }

            if (cell.field.text > 0) {
                cell.field.enabled = NO;
                cell.field.borderStyle = UITextBorderStyleNone;
            }

        } else {
            switch (row) {
                case 0:{
                    cell.field.text = [NSString stringWithFormat:@"+%@", [[NSUserDefaults standardUserDefaults] valueForKey:@"prefix"]];
                    cell.field.keyboardType = UIKeyboardTypePhonePad;
                    cell.label.text = @"Prefix";
                    break;
                }

                case 1:{
                    cell.field.text = [[NSUserDefaults standardUserDefaults] valueForKey:@"sender"];
                    cell.field.keyboardType = UIKeyboardTypeNamePhonePad;
                    cell.label.text = @"Sender";
                    break;
                }
                default:
                    break;
            }

        }

    }

    return cell;
}

Проблема в том, что, когда строка прокручивается за пределы окна, текстовое полеполучить пустой.Как я могу предотвратить это?
Я думал, что кэширование было правильным решением, но даже с многоразовым идентификатором у меня все еще остается та же проблема.

1 Ответ

0 голосов
/ 04 августа 2011

Используемый вами подход, который загружает ячейку таблицы из файла пера, требует - чтобы иметь правильную поддержку многоразовых ячеек - назначить в поле пера «Идентификатор» тот же строковый идентификатор, который вы используете в коде , То есть, если ваш идентификатор ячейки, используемый для блокировки кэша, - это «MyCellId», тогда поле «Идентификатор» UITableCellView в файле пера должно содержать тот же идентификатор «MyCellId». Но с подходом, которому вы придерживаетесь, это невозможно, так как идентификатор ячейки генерируется динамически, и тогда вы, конечно, не можете динамически назначить идентификатор ячейки загруженной nib-ячейке. Теоретически вы должны создать специальный файл пера для каждого из генерируемых вами идентификаторов MyCellId-% d. Поскольку я предполагаю, что у вас определена только одна ячейка таблицы, избавьтесь от генерации динамического идентификатора и используйте статическое имя, а затем присвойте это имя полю «Идентификатор» в файле пера ячейки.

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