如何选择以编程方式创建的文本字段?

时间:2014-07-22 14:11:24

标签: ios objective-c xcode

我正在以编程方式将文本字段添加到视图中:

// Add a text field.
UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(20, 100, 280, 40)];
textField.returnKeyType = UIReturnKeyNext;
[textField becomeFirstResponder];
[textField addTarget:self action:@selector(nextButtonPressed:) forControlEvents:UIControlEventEditingDidEndOnExit];

UITextField *textFieldTwo = [[UITextField alloc] initWithFrame:CGRectMake(20, 160, 280, 40)];
textFieldTwo.returnKeyType = UIReturnKeyDone;
[textFieldTwo addTarget:self action:@selector(doneButtonPressed:) forControlEvents:UIControlEventEditingDidEndOnExit];

如何在以后选择这些字段?
我知道如何在使用UI创建内容时执行此操作,但这对于动态添加的元素有何用处?

示例:我希望在" Next"按下按钮。

谢谢!

4 个答案:

答案 0 :(得分:2)

至少有两种方法:

  • 为每个动态创建的字段添加一个不同的标记,然后通过在您添加字段的视图上调用viewWithTag:,使用您提供的标记检索必填字段,或
  • 制作班级的textFieldtextFieldTwo个实例变量,必要时进行初始化,然后在想要向其发送输入时参考这些ivars。

第二种方式与通过Interface Builder添加字段时的操作非常接近。唯一的区别是,在这种情况下,字段是以编程方式添加的。

答案 1 :(得分:1)

您可以通过标记值获取这些值。对于这个

1 ..在创建时为每个textField设置唯一标记值。 (首先是45,第二个文本是78)

 textField.tag = 45; 

2 ..假设您已将这些textField添加为'myView'上的subView。

  UITextField *txtField = (UITextField*)[myView viewWithTag:45];

此行将为您提供包含标记45的文本字段,该标记添加在myView上。

注意 - 避免对任何控件使用'0'作为tagValue,因为'0'用作控件的byDefault tagValue。

答案 2 :(得分:1)

在这种情况下,我通常为viewController上的每个文本字段设置一个标记,并将它们作为委托分配给我的viewController:

// You  should use const to identify quickly your tag
textField.tag          = 10;
textFieldTwo.tag       = 11;
textField.delegate     = self;
textFieldTwo.delegate  = self;

然后我实现了textFieldShouldReturn委托方法:

#pragma mark - UITextFieldDelegate protocol conformance

-(BOOL)textFieldShouldReturn:(UITextField*)textField;
{
    NSInteger nextTag = textField.tag + 1;
    // Try to find next responder
    UIResponder* nextResponder = [textField.superview viewWithTag:nextTag];
    if (nextResponder) {
        // Found next responder, so set it.
        [nextResponder becomeFirstResponder];
    } else {
        // Not found, so remove keyboard.
        [textField resignFirstResponder];
    }
    return NO; // We do not want UITextField to insert line-breaks.
}

通过这样做,您可以拥有多个UITextField,其焦点从一个移动到另一个,而不必实现多个UIControlEventEditingDidEndOnExit事件方法。

答案 3 :(得分:0)

在第一个textField的UIControlEventEditingDidEndOnExit事件中,调用[textFieldTwo becomeFirstResponder]。