2

如何读取UITextField中的值IBAction?我正在以UITextField编程方式创建。所以我不能设置@property@synthesize使用 Xcode。生成的代码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)中读取每个文本框的值。任何人都可以帮助我吗?

4

4 回答 4

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];
        }
    }
}
于 2012-09-23T12:34:52.980 回答
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为例如让所有文本字段都带有唯一标签。

于 2012-09-23T12:21:46.553 回答
0
NSString *value = sender.text;

当然,如果在 IBAction 内部。

它忽略了有一组文本字段和一个按钮操作。

整个问题的最简单解决方案是将一组(或数组)文本字段存储在实例变量中,并在按钮操作中迭代该组。但这是一种相当粗略的方法。最好使用文本字段委托方法并将文本值直接存储在数组中,使用按钮触发保存。

此外,Apple HIG 会告诉您应该在编辑文本字段时更新您的数据模型,而不是使用“保存”按钮——这是糟糕的 UX 设计——当然,除非各个字段的值可以交互。

于 2012-09-23T12:22:36.137 回答
0

实现 IBAction 函数,如下所示:

-(IBAction) doneEditing:(UITextField*)sender
{
    NSString * val = sender.text;

}

尝试使用UITextFieldDelegate,我认为它更适合您的情况。

为每个 UITextField 添加一个标签,然后您将识别 UITextField。

于 2012-09-23T12:30:23.490 回答