如何阅读UITextField
中的IBAction
值?我正在以编程方式创建UITextField
。所以我无法使用Xcode设置@property
和@synthesize
。生成UITextField
的代码如下:
for(i=0; i<[fieldName count]; i++)
{
UITextField *name = [fieldName objectAtIndex:i];
frame = CGRectMake(fromLeft, fromTop, totalWidth, totalHeight);
name = [[[UITextField alloc] initWithFrame:frame] autorelease];
name.borderStyle = UITextBorderStyleRoundedRect;
name.returnKeyType = UIReturnKeyDone;
//name.placeholder = [fieldName objectAtIndex:i];
name.autocapitalizationType = UITextAutocapitalizationTypeWords;
name.adjustsFontSizeToFitWidth = TRUE;
name.keyboardType = UIKeyboardTypeDefault;
[name addTarget:self action:@selector(doneEditing:) forControlEvents:UIControlEventEditingDidEndOnExit];
[scroller addSubview:name];
fromTop = fromTop + 40;
}
现在我想在按钮单击(IBAction
)中读取每个文本框的值。有人可以帮帮我吗?
答案 0 :(得分:4)
您可以使用此类内容循环浏览UITextFields
的子视图的所有self.view
,并将其文本添加到NSMutableArray
:
for (UITextField *field in self.view.subviews) {
if ([field isKindOfClass:[UITextField class]]) {
if ([[field text] length] > 0) {
[someMutableArray addObject:field.text];
}
}
}
答案 1 :(得分:2)
如果您的doneEditing:
看起来像这样doneEditing:(id)sender
,那么您可以说:
UITextField *field = (UITextField *)sender;
NSString *myText = field.text;
修改强>
要在不设置为实例变量的情况下访问UITextField,您需要在创建它时对其进行标记:
[textField setTag:1];
然后,只要您想要访问它,您就可以通过标记从其父视图中获取它:
UITextField *myTextField = [scroller viewWithTag:1];
NSString *myString = myTextField.text;
在您的情况下,将代码设置为i+1
,例如让所有文本字段都包含唯一标记。
答案 2 :(得分:0)
NSString *value = sender.text;
当然,如果在IBAction内部。
忽略了一组文本字段和一个按钮操作。
解决整个问题的最简单方法是在实例变量中存储一组(或数组)文本字段,并在按钮操作中迭代该集合。但这是一种相当粗略的方法;最好使用文本字段委托方法并将文本值直接存储在数组中,使用按钮触发保存。
此外,Apple HIG会告诉您,您应该在编辑文本字段时更新数据模型,而不是使用“保存”按钮 - 这是一个糟糕的用户体验设计 - 当然,除非单个字段的值可以互动。
答案 3 :(得分:0)
实现IBAction功能,如下所示:
-(IBAction) doneEditing:(UITextField*)sender
{
NSString * val = sender.text;
}
尝试使用UITextFieldDelegate,我觉得它对你的情况更好。
为每个UITextField添加一个标记,然后您将识别UITextField。