1

我的应用程序中有几个文本视图。除了一个是 UITextField,另一个是 UITextView,位于其他的中间。这是因为此部分需要更多空间供用户输入并查看他们正在输入的所有内容。我进行了设置,以便当用户在键盘上按下下一个时,它会使用以下代码进入下一个字段:

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    if (textField == firstName) {
        [firstName resignFirstResponder];
        [lastName becomeFirstResponder];
    } else if (textField == lastName) {
        [lastName resignFirstResponder];
        [theRequest becomeFirstResponder];
    }
    else if (textField == theRequest) {
        [theRequest resignFirstResponder];
        [theDetails becomeFirstResponder];
    }
    else if (textField == theDetails) {
        [theDetails resignFirstResponder];
        [textdate becomeFirstResponder];
    }
    else if (textField == textdate) {
        [textdate resignFirstResponder];
        [location becomeFirstResponder];
    }
    else if (textField == location) {
        [location resignFirstResponder];

    }
    return YES;
}

一切都很好,直到我到达 UITextView。当我单击下一步时,它只是将光标向下推一行。我怎样才能让它响应简单地转到下一个字段?

此外,在位置单击下一步时,它会返回到名字。如何设置为只是关闭键盘?

4

3 回答 3

0

当我有多个文本字段时,我喜欢做的一件事是使用标签而不是一一检查。首先,在interface builder/中storyboard,按升序设置tag每个的属性UITextField,(最好从 1 开始)。比,你textFieldShouldReturn:减少到这样的事情。

- (BOOL) textFieldShouldReturn:(UITextField *)textField
{
    UIView * nextView = [self.scrollView viewWithTag:textField.tag + 1];
    if ([nextView respondsToSelector:@selector(becomeFirstResponder)])
        [nextView becomeFirstResponder];
    return NO;
}

关于您关于从 a 转到下一个字段的问题UITextView,我同意 Sergey 回答中的第二个选项

于 2014-05-08T19:44:35.707 回答
0

您可以尝试两种方法:

1) 使用功能

-(BOOL)textViewShouldReturn:(UITextView *)textView

实现所需的行为。

2)读这个:

如何使用返回键关闭 UITextView 的键盘?

并根据您的需求调整这些解决方案。

于 2014-05-08T19:20:45.193 回答
0

我知道这是一篇旧帖子,但自从我设法得到答案后,我想我会分享它。

- (BOOL) textFieldShouldReturn:(UITextField *)textField 
{
    [textView performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0.1];

    return YES;
}

有人告诉我,afterDelay:0.1它在设备上有所不同,我们可以在使用模拟器的地方使用afterDelay:0.0.

于 2016-01-20T16:12:38.577 回答