使用for循环以编程方式创建多个UITextField

时间:2011-07-11 14:07:43

标签: objective-c xcode

全新的编码;几个月来一直在利用stackoverflow;第一次问一个问题;请温柔。

我正在尝试使用for循环以编程方式创建一系列UITextField。这些字段的名称应为“pax1name”,“pax2name”,“pax3name”等。

我缺少的是如何获取字符串并使其成为textField的名称,每次for循环执行时都会更改textField的名称。

这是我的代码,但也许我会以错误的方式进行此操作?提前谢谢!

// set up the names textfields
for (int i = 0; i < 7; i++) {
    NSString *fieldName = [[NSString alloc] initWithFormat:@"pax%iname", (i + 1)];

    // I can't figure out what goes here to create a UITextField with the name of fieldName

    textField = [[UITextField alloc] initWithFrame:CGRectMake(15, (15 + (i * 40)), 400, 40)];
    textField.borderStyle = UITextBorderStyleRoundedRect;
    textField.font = [UIFont systemFontOfSize:15.0];
    textField.autocorrectionType = UITextAutocorrectionTypeNo;
    textField.clearButtonMode = UITextFieldViewModeWhileEditing;
    textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;

    [namesViewController addSubview: textField];

    [fieldName release];
    [textField release];
}

4 个答案:

答案 0 :(得分:1)

通常你会使用UIView属性tag。在循环中使用[textField setTag:<youCustomTag>]来设置值,例如你的变量i。请注意tag期望NSUInteger而不是NSString。

要访问正确的文本字段,您需要拨打[[namesViewController view] viewWithTag:<yourCustomTag>]

但是,是否真的有必要为视图控制器创建多个文本字段?通过创建一个单独的文本字段并在用户点击一行时按需设置tag-property,可能会有更优雅的解决方案。我不知道这对你有用。

答案 1 :(得分:1)

我认为你对此已经走错了路。 UITextField没有名为“name”的属性。要标识控件,可以使用其tag属性。看到这段代码:

for (int i = 0; i < 7; i++) {

    UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(...)];
    textField.tag = i + 1;
    ...
}

答案 2 :(得分:1)

当您说出文本字段的名称时,我假设您的意思是变量名称,而不是设置显示的文本。即你想在循环中创建变量,但后来能够按名称单独引用它们。

在这种情况下,你无法做你想做的事。您可以做的是将它们粘贴在一个数组中,以便以后方便地访问。

NSMutableArray *paxNameFields = [[NSMutableArray alloc] init]; // before your loop
[paxNameFields addObject: textField]; // inside the loop
[paxNameFields objectAtIndex: 5]; //sometime later use the 6th field

或者,如果您只是希望能够识别稍后传递给委托回调的UITextField,则可以设置/检查tag属性。

答案 3 :(得分:0)

UITextFields没有名字。您可能来自HTML世界,这些东西基本上是名称 - 值对的大散列。不像Cocoa Touch那样。正如@Florian Mielke所说,他们每个人都有一个int .tag属性,这可能是你想要设置的。