2011-07-11 155 views
1

品牌新的编码;几个月来一直在宗教上利用stackoverflow;第一次提问;请温柔。使用for循环以编程方式创建多个UITextField

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

我缺少的是如何获取字符串并将其作为textField的名称, textField每次执行for循环。

这是我的代码,但也许我正在做这个错误的方式?先谢谢你!

// 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]; 
} 
+0

+1对于你的第一个SO问题是完整的,清晰的,并包括代码。做得好。 –

+0

@DanRay谢谢!这一切都归功于我昨晚在Holiday Inn Express酒店住宿...... – wannabeacoder

回答

1

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

要想访问正确的文本字段,请致电[[namesViewController view] viewWithTag:<yourCustomTag>]

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

+0

感谢所有帮助过我的人!这个答案是最有用的,所以我接受它。我会发布我最终做的事,以防其他人发现它有用。 – wannabeacoder

+0

不客气。我编辑了代码示例,因为您必须为其viewWithTag:调用namesViewConroller的视图。 –

1

我认为你一直在错误的方式。 UITextField没有名为“name”的属性。要识别控件,您可以使用它的tag属性。请参阅此代码:

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

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

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

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属性。

相关问题