UITableViewCell с динамически добавленным UITextField с использованием addSubview - Как получить значения UITextField при нажатии «return» на клавиатуре - PullRequest
0 голосов
/ 14 марта 2011

Я создал экран входа в систему, используя UITableView с одним разделом и двумя ячейками.Вот как эти клетки создаются.Теперь я не знаю, как получить значения из этих ячеек позже.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSString *cellIdentifier = @"LoginCellIdentifier";

    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:cellIdentifier] autorelease];
        UILabel *leftLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 100, 25)];
        leftLabel.backgroundColor = [UIColor clearColor];
        leftLabel.tag = 1;
        [cell.contentView addSubview:leftLabel];
        [leftLabel release];

        UITextField *valueTextField = [[UITextField alloc] initWithFrame:CGRectMake(120, 10, 400, 35)];
        valueTextField.tag = 2;
        valueTextField.delegate = self;
        [cell.contentView addSubview:valueTextField];
        [valueTextField release];
    }

    if (indexPath.row == 0) {   // User name
        UILabel *lblText = (UILabel *)[cell.contentView viewWithTag:1];
        lblText.text = @"Username: ";

        UITextField *userNameField = (UITextField *)[cell.contentView viewWithTag:2];
        userNameField.placeholder = @"Enter your username here";        
    }
    else {  // Pass word
        UILabel *lblText = (UILabel *)[cell.contentView viewWithTag:1];
        lblText.text = @"Password: ";

        UITextField *passwordField = (UITextField *)[cell.contentView viewWithTag:2];
        passwordField.placeholder = @"Enter your password here";
        passwordField.secureTextEntry = YES;
    }

    return cell;
}

Точно, я хочу получить значение, когда пользователь нажимает клавишу return .Итак, я хочу получить значения текстового поля ячейки здесь ...

- (BOOL)textFieldShouldReturn:(UITextField *)textField {

    NSLog(@"%@ is the Value", textField.text);
    [textField resignFirstResponder];

    return YES;
}

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

Ответы [ 2 ]

2 голосов
/ 14 марта 2011

Вы должны использовать метод textFieldDidEndEditing:, как указано @ gnuchu , но для определения того, какое текстовое поле только что закончило редактирование, вы можете использовать этот код:

- (void)textFieldDidEndEditing:(UITextField *)textField {
    UITableViewCell *cell = (UITableViewCell *)[[textField superview] superview];
    UITableView *table = (UITableView *)[cell superview];
    NSIndexPath *textFieldIndexPath = [table indexPathForCell:cell];
    NSLog(@"Row %d just finished editing with the value %@",textFieldIndexPath.row,textField.text);
}

Вышекод должен работать для вас, но использование UITableView для 2 фиксированных ячеек является излишним и просто добавляет ненужные сложности в ваш код .IMO, вам лучше использовать стандартный вид с 2 метками и 2 текстовыми полями.Это может быть легко создано в Интерфейсном Разработчике или коде и значительно упростит вещи.

1 голос
/ 14 марта 2011

Вы должны реализовать UITextFieldDelegate (ссылка на документацию здесь ).Таким образом, вы сможете реализовать метод

- (void)textFieldDidEndEditing:(UITextField *)textField

, который будет срабатывать, когда пользователь завершит редактирование текстового поля.

...