使用UITextField和UITextView时textFieldShouldReturn方法的问题

时间:2011-07-26 05:16:39

标签: iphone uitextfield uitextview becomefirstresponder uikeyboardtype

我有一个分组表视图,其中包含3个部分,每个部分每行。前两个部分行包含UITextField(Name& Subject是部分标题),最后一个包含UITextView(Message是部分标题),因为我想通过此控制器本身从用户那里获取一些数据。

两个文本字段的returnKeyType为UIReturnKeyNext。对于UITextView,键盘中存在“返回”按钮以提供新行。所以我使用textFieldShouldReturn方法通过在UIKeyboard中按下这些返回类型按钮来导航到下一个单元格。

下一个按钮可以正常使用第一个文本字段(名称)。这里出现问题...如果我单击第二个单元格的下一个按钮,它将转到UITextView(最后一个单元格),向下一行。也就是说,光标从原始位置移开一行。

我的代码是......

-(BOOL) textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];
    if (textField == nameTextField) {
        [subjectTextField becomeFirstResponder];    
    }
    else if(textField == subjectTextField) {
        [messageTextView becomeFirstResponder];
    }
    return YES;
}

如何才能使这项工作正常?在此先感谢..

3 个答案:

答案 0 :(得分:11)

在测试很多东西时,我找到了一个简单但合适的解决方案:

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    if ( [textField isEqual: nameTextField] )
    {
        [nameTextField resignFirstResponder];
        [messageTextView becomeFirstResponder];
        return NO;
    }

    return YES;
}

它处理nameTextField本身的重新签名,并向请求返回NO。

答案 1 :(得分:0)

基本上发生的事情是,当点击返回时,您将文本视图作为第一个响应者,并将返回添加到文本视图中。这就是光标到达第二行的原因。尝试在textViewDidChange:delegate方法中执行此操作:

- (void)textViewDidChange:(UITextView *)textView {
        if(textView.text == @"\r") {
        textView.text = @"";
}

答案 2 :(得分:-1)

this link中,您将获得问题的解决方案。在此给出了文本编辑完成时我们如何隐藏键盘。