我正在以编程方式将文本字段添加到视图中:
// 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"按下按钮。
谢谢!
答案 0 :(得分:2)
至少有两种方法:
viewWithTag:
,使用您提供的标记检索必填字段,或textField
和textFieldTwo
个实例变量,必要时进行初始化,然后在想要向其发送输入时参考这些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]。