点击Return后转到下一个文本字段

时间:2012-12-20 12:40:44

标签: objective-c cocoa-touch ios5

我写了一个textFieldDone:方法,假设在点击Return按钮时将光标移动到下一个文本字段。

- (IBAction)textFieldDone:(id)sender {
     [nextTextField becomeFirstResponder];
     NSLog(@"in : textFieldDone");
}

我已将第一个文本字段的“退出时退出”事件连接到文件所有者,并选择了textFieldDone:方法。 我还将文件所有者指定为文本字段的委托(因为我需要视图相应地向上/向下滚动,因此键盘不会隐藏文本字段)。

当我在模拟器上运行应用程序并点击返回按钮时,第一个文本字段辞职第一响应者,并在日志中我看到该程序没有通过textFieldDone:方法,但它确实通过了textFieldDidEndEditing:方法。

之前我使用过这种方法,没有问题。

是因为文件所有者是文本域的委托吗?

3 个答案:

答案 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。