Iphone 将UITextField与UITextView一起使用时,textFieldShouldReturn方法存在问题

Iphone 将UITextField与UITextView一起使用时,textFieldShouldReturn方法存在问题,iphone,uitextfield,uitextview,becomefirstresponder,uikeyboardtype,Iphone,Uitextfield,Uitextview,Becomefirstresponder,Uikeyboardtype,我有一个分组表视图,它包含3个部分,每个部分的每一行。前两个部分行包含UITextField(名称和主题是部分标题),最后一个包含UITextView(消息是部分标题),因为我希望通过此控制器本身从用户处获取一些数据 这两个文本字段的returnKeyType为UIReturnKeyNext。对于UITextView,“返回”按钮位于键盘中,用于输入新行。所以我使用textFieldShouldReturn方法,通过按UIKeyboard中的这些返回类型按钮导航到下一个单元格 “下一步”按钮将与

我有一个分组表视图,它包含3个部分,每个部分的每一行。前两个部分行包含UITextField(名称和主题是部分标题),最后一个包含UITextView(消息是部分标题),因为我希望通过此控制器本身从用户处获取一些数据

这两个文本字段的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;
}

我该怎么做才能使这项工作顺利进行?提前感谢。

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

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

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

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

    return YES;
}

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

此解决方案的工作方式与编写方式不同-它应该使用ISEQUALTOSTRING。此解决方案的另一个问题是,它只适用于空的UITextView。如果你有一个带有文本的,它仍然会在光标的旧位置插入一个换行符。请参考链接中lorean的答案。[1]: