我有一個包含UITextField和UITextView的滾動視圖。 UITextField返回鍵是「Next」,當按下時,我調用[myTextView becomeFirstResponder];隨機新行插入到我的文本視圖,所以我開始在第二行。我如何避免這種情況?UITextView無意中添加新行嗎?
同樣重要的是要注意,當我直接點擊UITextView而不是點擊下一個鍵時,不會發生這種情況。
提前致謝!
我有一個包含UITextField和UITextView的滾動視圖。 UITextField返回鍵是「Next」,當按下時,我調用[myTextView becomeFirstResponder];隨機新行插入到我的文本視圖,所以我開始在第二行。我如何避免這種情況?UITextView無意中添加新行嗎?
同樣重要的是要注意,當我直接點擊UITextView而不是點擊下一個鍵時,不會發生這種情況。
提前致謝!
一種解決辦法是,當你實現textFieldShouldReturn:
委託方法時,一定要返回NO
,而不是YES
。通過返回NO
,換行符不會傳遞到文本字段。
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
// move to next field or whatever you need
[myTextView becomeFirstResponder];
return NO;
}
這兩個工作如何對今天在這裏每個人upvote :) – 2014-01-30 22:59:18
太棒了!這個真的有用!謝謝! textFieldShouldReturn YES實際上是通過了換行符。沒有,它沒有。 –
好的,這種行爲是由於在使用下一個按鈕在同一個運行循環中成爲firstresponder時iOS中的一個錯誤。爲了解決這個問題,你應該手動完成。 首先從textFied中退出第一響應者,然後將textView作爲第一響應者。喜歡這個。實現這個委託方法。要解決這個
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
[textView performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0.0];
return YES;
}
類似想法performSelector
,但使用異步調度隊列(斯威夫特第4版):
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
DispatchQueue.main.async {
self.myTextView.becomeFirstResponder()
}
return true
}
這將使事情變得更好,如果你分享一些代碼。你確定你沒有設置一些東西到textView.text屬性...? –
這是全部在界面生成器中創建的,所以我沒有任何東西可以共享。我目前在我的實現文件中沒有代碼 – Stephen
你說你沒有代碼,但你的問題表明你調用'[myTextView becomeFirstResponder];'。這是一個矛盾。你顯然有代碼。 – rmaddy