Как получить значения текстового поля в представлении таблицы в iPhone? - PullRequest
1 голос
/ 06 мая 2011

Я создал страницу входа, которая содержит имя пользователя и пароль.Я создал одну пользовательскую ячейку, и она имеет одну метку и одно текстовое поле.И я создал одно сгруппированное табличное представление и использовал пользовательскую ячейку.На самом деле я создал успешно, но проблема в том, как я могу получить значения текстового поля для имени пользователя и пароля.Потому что я использовал только одно текстовое поле для обоих полей.Я не мог получить значения текстового поля правильно.Я всегда получаю последнее значение для обоих полей.Как я могу получить имя пользователя и текстовые значения пароля правильно?

Вот мой пример кода,

В пользовательской ячейке,

@interface CustomCell : UITableViewCell {

    UILabel *userLbl;

    UITextField *userTxt;

}

@property (nonatomic, retain) IBOutlet UILabel *userLbl;

@property (nonatomic, retain) IBOutlet UITextField *userTxt;

@end

В контроллере Root View

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {

        NSArray *nibObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:nil options:nil];

        for(id currentObjects in nibObjects)
        {
            if([currentObjects isKindOfClass:[CustomCell class]])
            {
                cell = (CustomCell *) currentObjects;
            }
        }
    }
    if (indexPath.section == 0) {

        if(indexPath.row == 0)
        {
            [[cell userLbl] setText:@"User Name:"];

            cell.userTxt.tag = 0;

            //self.userName = [[cell userTxt] text];


        }
        if (indexPath.row == 1) {

            [[cell userLbl] setText:@"Pass Word:"];

            cell.userTxt.secureTextEntry = YES;

            //self.passWord = [[cell userTxt] text];

            cell.userTxt.tag = 1;

        }

    }

    cell.selectionStyle = UITableViewCellSelectionStyleNone;


    // Configure the cell.

    return cell;
}

-(IBAction) submitAction : (id) sender
{

    self.userName = [[cell userTxt] text];

    self.passWord = [[cell userTxt] text];

    [cell.userTxt resignFirstResponder];

    NSLog(@"The user Name is %@", self.userName);

    NSLog(@"The password is %@", self.passWord);

     //Doesn't work

 /*   UITextField *txtField = (UITextField*)[cell viewWithTag:0];

    self.userName = [txtField text];

    UITextField *txtField1 = (UITextField*)[cell viewWithTag:1];

    self.passWord = [txtField1 text];

  NSLog(@"The user Name is %@",  self.userName);

  NSLog(@"The password is %@", self.passWord);*/

}

Вот мой снимок экрана с изображением,

enter image description here

Пожалуйста, помогите мне.

Спасибо.

Ответы [ 4 ]

3 голосов
/ 04 июля 2012

Вы можете использовать метод textFieldShouldEndEditing, если вы используете более одного текстового поля, так как метод textFieldShouldReturn получит только строку из текстового поля, которая присваивает значение FirstResponder, и, следовательно, вы пропустите все другие текстовые поля.Это то, что я использовал в своем недавнем проекте, когда у меня была форма, построенная с таблицей и текстовыми полями.Это озадачило меня на некоторое время.

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
    switch (textField.tag) 
    {
        case 0:
            userName = textField.text;
            break;

        case 1:
            passWord = textField.text;
            break;
    }
    return YES;
}
2 голосов
/ 06 мая 2011

использовать тег для каждого текстового поля и вызова -

UITextField *txtField = (UITextField*)[cell viewWithTag:tag];
NSString *text = [txtField text];

, а также 7KV7 правильно, вы назначаете один и тот же тег для обоих текстовых полей.

1 голос
/ 06 мая 2011

Почему бы не сделать это элегантно?В вашем методе UITextFieldDelegate сделайте это следующим образом:

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];

   switch (textField.tag) {
    case 0:
        self.userName = textField.text;
        break;
    case 1:
        self.passWord = textField.text;
        break;   
    default:
        break;
 }
}

Таким образом, у вас уже есть данные, когда пользователь нажимает кнопку Отправить.Просто мысль.

0 голосов
/ 06 мая 2011

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

ОБНОВЛЕНИЕ

Кстати, как вы можете получить доступ к ячейке в методе submitAction.Я думаю, что проще присвоить текст в textfields переменной экземпляра, скажем username и password, и использовать это в вашем методе.

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