如何在IBAction中读取UITextField值。我正在以编程方式创建UITextField

时间:2012-09-23 12:19:23

标签: iphone objective-c ios ios5

如何阅读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)中读取每个文本框的值。有人可以帮帮我吗?

4 个答案:

答案 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。