我的应用中有几个文字视图。除了一个之外的所有都是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。当我在那里点击它时,它只是将光标向下推一行。我怎样才能让它回复到下一个字段?
此外,在位置中单击“下一步”时,它将返回到名字。怎么设置才能解除键盘?
答案 0 :(得分:0)
您可以尝试两种方式:
1)使用功能
-(BOOL)textViewShouldReturn:(UITextView *)textView
实现所需的行为。
2)阅读本文:
How to dismiss keyboard for UITextView with return key?
并根据您的需要调整这些解决方案。
答案 1 :(得分:0)
当我有多个文本字段时,我喜欢做的一件事是使用标记而不是逐个检查。首先,在interface builder
/ storyboard
中,按升序设置每个tag
的{{1}}属性,(如果从1开始则更好)。比,你的UITextField
减少到这样的东西。
textFieldShouldReturn:
关于你从- (BOOL) textFieldShouldReturn:(UITextField *)textField
{
UIView * nextView = [self.scrollView viewWithTag:textField.tag + 1];
if ([nextView respondsToSelector:@selector(becomeFirstResponder)])
[nextView becomeFirstResponder];
return NO;
}
转到下一个字段的问题,我同意谢尔盖的第二个选项
答案 2 :(得分:0)
我知道这是一个老帖子,但是因为我设法得到答案,我想我分享了。
- (BOOL) textFieldShouldReturn:(UITextField *)textField
{
[textView performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0.1];
return YES;
}
我被告知使用afterDelay:0.1
它会对设备产生影响,使用模拟器我们可以使用afterDelay:0.0
。