[英]Change 'Return' button function to 'Done' in swift in UITextView
我想在用戶打字時擺脫鍵盤的“返回”功能,所以沒有新行,所以我希望“返回”鍵起到“完成”的作用,這樣它就會隱藏鍵盤.
我正在使用 UITextView,這是可編輯的,因此用戶可以輸入他們的帖子,並將其發布到主時間軸,但由於我有固定的單元格,我不希望用戶能夠按“返回”他們的帖子將超出時間表的范圍。
我發現這適用於 UITextField,但不適用於 UITextView:
func textFieldShouldReturn(textField: UITextField!) -> Bool {
textField.resignFirstResponder() //if desired
return true
}
所以我只是想知道是否有辦法在 UITextView 中做到這一點,或者至少在按下返回時能夠隱藏鍵盤,而不是創建一個新行。
您可以設置文本字段的返回鍵類型:
textField.returnKeyType = UIReturnKeyType.done
更新您絕對可以使用相同的方法將返回鍵設置為“完成”,如上所述。 但是,當用戶點擊返回鍵時,UITextView 不提供回調。 作為一種解決方法,您可以嘗試處理 textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) 委托調用,並在檢測到新行字符的輸入時關閉鍵盤:
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
if (text == "\n") {
textView.resignFirstResponder()
}
return true
}
我已經嘗試了很多代碼,最后這在 Swift 3.0 最新 [2019 年 4 月] 中對我有用,這是使用 UITextFields 實現的
“ViewController”類應該繼承“UITextFieldDelegate”以使此代碼工作。
class ViewController: UIViewController,UITextFieldDelegate
添加具有正確標簽編號的文本字段,該標簽編號用於根據分配給它的增量標簽編號將控件帶到適當的文本字段。
override func viewDidLoad() {
userNameTextField.delegate = self
userNameTextField.tag = 0
userNameTextField.returnKeyType = .next
passwordTextField.delegate = self
passwordTextField.tag = 1
passwordTextField.returnKeyType = .go
}
在上面的代碼中,“returnKeyType = UIReturnKeyType.next”將使鍵盤返回鍵顯示為“Next”,您還有其他選項如“Join/Go”等,根據您的應用程序更改值。
這個“textFieldShouldReturn”是 UITextFieldDelegate 控制的一個方法,這里我們有基於 Tag 值增量的下一個字段選擇。
func textFieldShouldReturn(_ textField: UITextField) -> Bool
{
if let nextField = textField.superview?.viewWithTag(textField.tag + 1) as? UITextField {
nextField.becomeFirstResponder()
} else {
textField.resignFirstResponder()
return true;
}
return false
}
如果您正在使用故事板或 xib,您可以在 Interface Builder 中將UITextView's
返回按鈕更改為“完成”(或各種其他選項),而無需任何設置代碼。 只需在屬性檢查器中查找此選項:
從那里,您只需將它與其他人已經在此處提供的UITextViewDelegate
代碼配對。
斯威夫特 v5:
extension ExampleViewController: UITextViewDelegate {
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
if (text == "\n") {
textView.resignFirstResponder()
}
return true
}
}
然后,在您的viewDidLoad()
方法中:
exampleTextView.delegate = self
在 Swift 4 中工作
在 viewDidLoad() 中添加它。
textField.returnKeyType = UIReturnKeyType.Done
將此添加到您喜歡的任何位置。
extension UITextView: UITextViewDelegate {
public func textViewDidChange(_ textView: UITextView) {
if text.last == "\n" { //Check if last char is newline
text.removeLast() //Remove newline
textView.resignFirstResponder() //Dismiss keyboard
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.