我写了一个textFieldDone:
方法,假设在点击Return按钮时将光标移动到下一个文本字段。
- (IBAction)textFieldDone:(id)sender {
[nextTextField becomeFirstResponder];
NSLog(@"in : textFieldDone");
}
我已将第一个文本字段的“退出时退出”事件连接到文件所有者,并选择了textFieldDone:
方法。
我还将文件所有者指定为文本字段的委托(因为我需要视图相应地向上/向下滚动,因此键盘不会隐藏文本字段)。
当我在模拟器上运行应用程序并点击返回按钮时,第一个文本字段辞职第一响应者,并在日志中我看到该程序没有通过textFieldDone:
方法,但它确实通过了textFieldDidEndEditing:
方法。
之前我使用过这种方法,没有问题。
是因为文件所有者是文本域的委托吗?
答案 0 :(得分:3)
你需要写上
- (BOOL) textFieldShouldReturn:(UITextField*) textField
转到下一个文本字段
示例代码: -
-(BOOL) textFieldShouldReturn:(UITextField*) textField
{
if (textField == txt1)
{
[txt1 resignFirstResponder];
[txt2 becomeFirstResponder];
}
if (textField == txt2)
{
[txt2 resignFirstResponder];
}
return YES;
}
别忘了将委托UITextFieldDelegate
添加到您的UITextfield
希望它可以帮助你..
答案 1 :(得分:1)
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
if ([textField isEqual:txt1])
{
[txt2 becomeFirstResponder];
}
return true;
}
答案 2 :(得分:1)
上述答案是正确的,但为了使其更加通用,您应该使用标签选项
UITextField *txt1;
txt1.tag=1;
UITextField *txt2;
txt2.tag=2;
UITextField *txt3;
txt3.tag=3;
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
if ([[textField superview] viewWithTag:textField.tag+1])
{
[[[textField superview] viewWithTag:textField.tag+1] becomeFirstResponder];
}
else{ [textField resignFirstResponder];
}
return true;
}
注意:不要将textField
与标记0一起使用。因为默认情况下所有subViews
都有tag = 0。