我创建了包含用户名和密码的登录页面。我创建了一个自定义单元格,它有一个标签和一个文本字段。我创建了一个分组表视图并使用了自定义单元格。实际上我已经成功创建但问题是,如何获取用户名和密码的文本字段值。 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);*/
}
这里我的屏幕截图是
请帮助我。
感谢。
答案 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
中的文本分配给实例变量username
和password
,并在您的方法中使用它。