如何在iPhone的表格视图中获取文本字段值?

时间:2011-05-06 11:25:15

标签: iphone uitableview

我创建了包含用户名和密码的登录页面。我创建了一个自定义单元格,它有一个标签和一个文本字段。我创建了一个分组表视图并使用了自定义单元格。实际上我已经成功创建但问题是,如何获取用户名和密码的文本字段值。 Bcoz我两个字段只使用了一个文本字段。我无法正确获取文本字段值。我总是得到两个字段的最后一个值。如何获取用户名并正确传递单词文本值?

这是我的示例代码,

在自定义单元格中,

@interface CustomCell : UITableViewCell {

    UILabel *userLbl;

    UITextField *userTxt;

}

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

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

@end

在Root View Controller中,

// 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 个答案:

答案 0 :(得分:3)

如果您使用多个文本字段,则可以使用textFieldShouldEndEditing方法,因为textFieldShouldReturn方法只会从调用FirstResponder的文本字段中获取字符串,因此您将错过所有其他文本字段。这是我在最近的项目中使用的,当时我有一个使用tableview和textfields构建的表单。让我困惑了一段时间。

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

        case 1:
            passWord = textField.text;
            break;
    }
    return YES;
}

答案 1 :(得分:2)

为每个文本字段和调用使用标记 -

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

并且7KV7也正确您为两个文本字段分配了相同的标记。

答案 2 :(得分:1)

为什么不优雅地做呢?在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;
 }
}

这样,当用户点击提交时,您已经拥有了数据。只是一个想法。

答案 3 :(得分:0)

我认为为文本字段设置标记的方式存在一些问题。我猜两个都有相同的标签1.请参阅更改有助于

<强>更新

顺便说一下,如何在方法submitAction中访问单元格。我认为更容易将textfields中的文本分配给实例变量usernamepassword,并在您的方法中使用它。