UITextField в ячейке UITableView возвращает ноль - PullRequest
2 голосов
/ 28 октября 2010

Я уже довольно давно бьюсь головой об стену.Приветствуется любой ввод или направление.

Таким образом, целью является создание формы для входа в систему из текстовых полей в таблице.Эта пользовательская информация, как только она будет собрана, будет передана в массив в отдельном контроллере представления, чтобы ее можно было сохранить в списке «избранных».

Итак, я создал форму, которая выглядит великолепно, но все, когдаутешите результаты формы поля возвращаются (нуль).Я выбрал сайт для ответов, но не могу ничего точного.Ниже представлен метод cellForRowAtIndexPath: я чувствую, что, возможно, проблема в том, где я создаю textFields.Опять же, любой вклад приветствуется!

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        static NSString *CellIdentifier = @"Cell";
        NSArray *listData =[self.tableContents objectForKey:[self.sortedKeys objectAtIndex:[indexPath section]]];

        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

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

                textField = [[UITextField alloc] initWithFrame:CGRectMake(120, 13, 375, 30)];
                [textField retain];
        }

        textField.adjustsFontSizeToFitWidth = NO;
        textField.font = [UIFont fontWithName:@"Helvetica" size:14.0];
        textField.textColor = [UIColor darkGrayColor];
        textField.returnKeyType = UIReturnKeyDone;
        textField.backgroundColor = [UIColor clearColor];
        textField.autocorrectionType = UITextAutocorrectionTypeNo; 
        textField.autocapitalizationType = UITextAutocapitalizationTypeNone;
        textField.textAlignment = UITextAlignmentLeft;
        textField.clearButtonMode = UITextFieldViewModeNever;
        textField.delegate = self;

        if ([indexPath section] == 0) {
                switch (indexPath.row) {
                        case 0:
                                textField.placeholder = @"Optional";
                                textField.secureTextEntry = NO;
                                textField.keyboardType = UIKeyboardTypeDefault;
                                textField.tag = 0;
                                break;
                        case 1:
                                textField.placeholder = @"";
                                textField.secureTextEntry = NO;
                                textField.keyboardType = UIKeyboardTypeDefault;
                                textField.tag = 1;
                                break;
                        case 2:
                                textField.placeholder = @"";
                                textField.secureTextEntry = NO;
                                textField.keyboardType = UIKeyboardTypeDefault;
                                textField.tag = 2;
                                break;
                        case 3:
                                textField.placeholder = @"";
                                textField.secureTextEntry = YES;
                                textField.keyboardType = UIKeyboardTypeDefault;
                                textField.tag = 3;
                                break;
                        case 4:
                                textField.placeholder = @"Optional";
                                textField.secureTextEntry = NO;
                                textField.keyboardType = UIKeyboardTypeDefault;
                                textField.tag = 4;
                                break;
                        case 5:
                                textField.placeholder = @"Optional";
                                textField.secureTextEntry = NO;
                                textField.keyboardType = UIKeyboardTypeNumberPad;
                                textField.tag = 5;
                                break;
                }               
        }

        [textField setEnabled: YES];

        [cell addSubview:textField];

  cell.textLabel.text = [listData objectAtIndex:indexPath.row];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
        cell.accessoryType = UITableViewCellAccessoryNone;
        cell.editing = YES;

        return cell;
}

Ответы [ 2 ]

7 голосов
/ 28 октября 2010

Переменная textField (я предполагаю, что это класс ivar или статическая глобальная переменная) - ваша основная проблема.Вы создаете новое текстовое поле каждый раз, когда создаете новую ячейку, что нормально, но затем вы добавляете его в ячейку каждый раз, когда вызывается метод cellForRowAtIndexPath.Поскольку ячейки используются повторно, это все испортит.

Ваш код должен выглядеть примерно так:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";
    NSArray *listData =[self.tableContents objectForKey:[self.sortedKeys objectAtIndex:[indexPath section]]];

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

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

            cell.selectionStyle = UITableViewCellSelectionStyleNone;
            cell.accessoryType = UITableViewCellAccessoryNone;
            cell.editing = YES;

            UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(120, 13, 375, 30)];
            textfield.tag = 1;
            textField.adjustsFontSizeToFitWidth = NO;
            textField.font = [UIFont fontWithName:@"Helvetica" size:14.0];
            textField.textColor = [UIColor darkGrayColor];
            textField.returnKeyType = UIReturnKeyDone;
            textField.backgroundColor = [UIColor clearColor];
            textField.autocorrectionType = UITextAutocorrectionTypeNo; 
            textField.autocapitalizationType = UITextAutocapitalizationTypeNone;
            textField.textAlignment = UITextAlignmentLeft;
            textField.clearButtonMode = UITextFieldViewModeNever;
            textField.delegate = self;
            [textField setEnabled: YES];

            [cell.contentView addSubview:textField];
            [textField release];
    }

    UITextField *textField = (UITextField *) [cell.contentView viewWithTag:1];

    if ([indexPath section] == 0) {
            switch (indexPath.row) {
                    case 0:
                            textField.placeholder = @"Optional";
                            textField.secureTextEntry = NO;
                            textField.keyboardType = UIKeyboardTypeDefault;
                            break;
                    case 1:
                            textField.placeholder = @"";
                            textField.secureTextEntry = NO;
                            textField.keyboardType = UIKeyboardTypeDefault;
                            break;
                    case 2:
                            textField.placeholder = @"";
                            textField.secureTextEntry = NO;
                            textField.keyboardType = UIKeyboardTypeDefault;
                            break;
                    case 3:
                            textField.placeholder = @"";
                            textField.secureTextEntry = YES;
                            textField.keyboardType = UIKeyboardTypeDefault;
                            break;
                    case 4:
                            textField.placeholder = @"Optional";
                            textField.secureTextEntry = NO;
                            textField.keyboardType = UIKeyboardTypeDefault;
                            break;
                    case 5:
                            textField.placeholder = @"Optional";
                            textField.secureTextEntry = NO;
                            textField.keyboardType = UIKeyboardTypeNumberPad;
                            break;
            }               
    }

    textField.text = [listData objectAtIndex:indexPath.row];

    return cell;
}

Не уверен, что это именно то, что вы хотите, но это должно указать вам на правильноенаправление.

2 голосов
/ 28 октября 2010

Создайте собственную ячейку для размещения своего текстового поля, ради любви к Богу.Вы не должны иметь addSubview: связанный код в вашем tableView:cellForRowAtIndexPath:;просто код, который выделяет ячейку и настраивает ячейку достаточно для того, чтобы сама ячейка могла отображать вещи так, как вы хотите.

Посмотрите на набор табличных представлений для примера использования пользовательских ячеек.Я считаю, что 4_ и 5_ имеют собственные ячейки.

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