我有一个包含UITextField和UITextView的滚动视图。 UITextField返回键是“Next”,当按下它时,我调用[myTextView becomeFirstResponder];一个随机的新行插入到我的textview中,所以我从第二行开始。我该如何避免这种情况?
同样重要的是要注意,当我直接点击UITextView而不是点击下一个键时,不会发生这种情况。
提前致谢!
答案 0 :(得分:68)
解决此问题的一个解决方案是,当您实施textFieldShouldReturn:
委托方法时,请务必返回NO
,而不是YES
。通过返回NO
,换行符不会传递到文本字段。
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
// move to next field or whatever you need
[myTextView becomeFirstResponder];
return NO;
}
答案 1 :(得分:11)
好的,这种行为是由于iOS中的一个错误,当使用下一个按钮成为同一个运行循环中的第一个响应者时。要完成此操作,您应该手动执行此操作。 首先从textFied中退出第一个响应者,然后将textView作为第一个响应者。像这样。实现此委托方法。
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
[textView performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0.0];
return YES;
}
答案 2 :(得分:0)
与performSelector
类似的想法,但使用异步调度队列(Swift 4版本):
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
DispatchQueue.main.async {
self.myTextView.becomeFirstResponder()
}
return true
}