6

我有一个分组表视图,其中包含 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;
}

我应该怎么做才能使这项工作正常进行?提前致谢..

4

2 回答 2

11

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

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

    return YES;
}

它处理 nameTextField 本身的辞职并向请求返回 NO。

于 2011-08-02T13:41:40.573 回答
0

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

- (void)textViewDidChange:(UITextView *)textView {
        if(textView.text == @"\r") {
        textView.text = @"";
}
于 2011-07-26T07:03:27.790 回答