全新的编码;几个月来一直在利用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];
}
答案 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
属性,这可能是你想要设置的。