2

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

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

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

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

我以前用过那个方法,没有问题。

是因为文件的所有者是文本字段的代表吗?

4

3 回答 3

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。

于 2012-12-20T12:49:21.257 回答
1
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    if ([textField isEqual:txt1]) 
    {
        [txt2 becomeFirstResponder];
    }
    return true;    
}
于 2012-12-20T12:42:58.670 回答
1

上面的答案是正确的,但是为了使这个更通用,您应该使用 tag 选项

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默认情况下所有标签都具有标签=0。

于 2012-12-20T12:58:37.800 回答