【问题标题】:Problem with textFieldShouldReturn method when using UITextField along with UITextView将 UITextField 与 UITextView 一起使用时 textFieldShouldReturn 方法出现问题
【发布时间】:2011-07-26 05:16:39
【问题描述】:

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

我应该怎么做才能使这项工作正常进行?在此先感谢..

【问题讨论】:

标签: iphone uitextfield uitextview becomefirstresponder uikeyboardtype


【解决方案1】:

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

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

    return YES;
}

它自己处理 nameTextField 的辞职,并向请求返回 NO。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 这个解决方案不能像它写的那样工作 - 它应该使用 isEqaualToString。此解决方案的另一个问题是它仅适用于空的 UITextView。如果你有一个文本,它仍然会在光标的旧位置插入一个换行符。
    猜你喜欢
    • 1970-01-01
    • 2011-03-15
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2010-10-26
    • 2020-06-17
    相关资源
    最近更新 更多