如何在iOS 5中添加多个UITextfield?

时间:2012-02-12 08:40:54

标签: ios uikit uitextfield

如何创建多个UITextField并将其添加到控制器?

我可以创建一个,像这样:

UITextField *tf = [[UITextField alloc] initWithFrame:CGRectMake(5,5,100,25)];
tf.borderStyle = UITextBorderStyleRoundedRect;
[tf setReturnKeyType:UIReturnKeyDefault];
[tf setEnablesReturnKeyAutomatically:YES];
[tf setDelegate:self];
[self.view addSubview:tf]

但我是否需要为每个UITextField执行此操作?

什么是模板UI控件的最佳方法?

2 个答案:

答案 0 :(得分:1)

将其置于循环中,偏移每个文本字段的Y位置并标记每个文本字段:

for (int i = ; i < numberOfTextFieldsNeeded; i++) {
    UITextField *tf = [[UITextField alloc] initWithFrame:CGRectMake(5, 5 + 35 * i ,100,25)]; // 10 px padding between each view
    tf.tag = i + 1; // tag it for future reference (+1 because tag is 0 by default which might create problems)
    tf.borderStyle = UITextBorderStyleRoundedRect;
    [tf setReturnKeyType:UIReturnKeyDefault];
    [tf setEnablesReturnKeyAutomatically:YES];
    [tf setDelegate:self];
    [self.view addSubview:tf]
    // don't forget to do [tf release]; if not using ARC
}

然后在委托方法中,基于调用每个委托方法的textField的标记执行操作。例如,当用户点击返回键时切换到下一个文本视图:

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
    [textField resignFirstResponder];
    UITextField *nextTextField = [self.view viewWithTag:textField.tag + 1];
    [nextTextField becomeFirstResponder];
}

请注意,在Objective-C中向nil发送消息不会崩溃,因此当用户点击上一个文本字段中的返回键时,UITextField *nextTextField = [self.view viewWithTag:textField.tag + 1];将返回nil,并调用becomeFirstResponder,这将完全正常在零上无所事事。但是你可以检查nextTextField是否为nil然后做其他事情,无论你喜欢什么。

答案 1 :(得分:0)

您可以使用界面构建器创建视图(大于屏幕适合的大小)并以编程方式将其添加到scrollView。 这是我认为最好的方法。