Ios UITextView是否无意中添加新行?
我有一个包含UITextField和UITextView的滚动视图。UITextField返回键为“Next”,按下此键时,我调用[myTextView becomeFirstResponder];一个随机的新行被插入到我的文本视图中,所以我从第二行开始。我如何避免这种情况 还需要注意的是,当我直接点击UITextView而不是点击下一个键时,不会发生这种情况Ios UITextView是否无意中添加新行?,ios,objective-c,ios7,Ios,Objective C,Ios7,我有一个包含UITextField和UITextView的滚动视图。UITextField返回键为“Next”,按下此键时,我调用[myTextView becomeFirstResponder];一个随机的新行被插入到我的文本视图中,所以我从第二行开始。我如何避免这种情况 还需要注意的是,当我直接点击UITextView而不是点击下一个键时,不会发生这种情况 提前谢谢 好的,这种行为是由于使用“下一步”按钮成为同一运行循环中的第一响应者时,iOS中出现了一个错误。为了克服这个问题,你应该手动完
提前谢谢 好的,这种行为是由于使用“下一步”按钮成为同一运行循环中的第一响应者时,iOS中出现了一个错误。为了克服这个问题,你应该手动完成。 首先让第一响应者退出textFied,然后让textView成为第一响应者。这样地。实现此委托方法
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
[textView performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0.0];
return YES;
}
解决此问题的一个解决方案是,当您实现
textFieldShouldReturn:
delegate方法时,确保返回NO
,而不是YES
。通过返回NO
,换行符不会传递到文本字段
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
// move to next field or whatever you need
[myTextView becomeFirstResponder];
return NO;
}
与执行选择器类似,但使用异步调度队列(Swift 4版本):
如果您共享一些代码,它将使事情变得更好。您确定没有将某些内容设置为textView.text属性…?这都是在interface builder中创建的,因此我没有任何内容可共享。我当前的实现文件中没有代码您说您没有代码,但您的问题表明您调用了
[myTextView becomeFirstResponder]代码>。这是一个矛盾。很明显你有代码。Lol抱歉我的错误,我忘记了textFieldShouldReturn方法。但至少我知道这是一个iOS错误。谢谢大家的帮助,没必要这么做。看到我的答案了。这两种方法都有效。今天大家投票表决怎么样:)为什么要先让文本字段中的第一响应者辞职?为什么不在文本视图
上直接呼叫延迟的成为第一响应者
?这两种方法都有效,今天大家一起投票吧:)太棒了!这个真的很管用!谢谢textFieldShouldReturn是实际上通过了换行符。没有,它没有。
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
DispatchQueue.main.async {
self.myTextView.becomeFirstResponder()
}
return true
}