【问题标题】:Create multiple UITextFields programmatically using a for loop使用 for 循环以编程方式创建多个 UITextField
【发布时间】:2011-07-11 14:07:42
【问题描述】:

全新的编码;几个月来一直在虔诚地使用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];
}

【问题讨论】:

  • +1 表示您的第一个 SO 问题完整、清晰且包含代码。干得好。
  • @DanRay 谢谢!这一切都归功于我昨晚住在智选假日酒店....

标签: objective-c xcode


【解决方案1】:

通常你使用 UIView 属性tag 来做这件事。在循环中使用 [textField setTag:&lt;youCustomTag&gt;] 来设置值,例如你的变量i。请注意,tag 期望的是 NSUInteger 而不是 NSString。

之后要访问正确的文本字段,您需要调用 [[namesViewController view] viewWithTag:&lt;yourCustomTag&gt;]

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

【讨论】:

  • 感谢所有帮助的人!这个答案是最有帮助的,所以我接受了。我会发布我最终做的事情,以防其他人发现它有用。
  • 不客气。我已经编辑了代码示例,因为您必须调用 namesViewConroller 的视图,因为它的 viewWithTag:.
【解决方案2】:

我认为你在这件事上走错了路。 UITextField 没有名为“名称”的属性。要识别控件,可以使用其tag 属性。请参阅此代码:

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

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

【讨论】:

    【解决方案3】:

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

    在这种情况下,你不能做你想做的事。您可以做的就是将它们放在一个数组中,以便以后方便地访问。

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-28
        • 1970-01-01
        • 1970-01-01
        • 2021-12-01
        • 2022-01-01
        相关资源
        最近更新 更多