swift uitextview xcode6 uikeyboard

swift - descartar el teclado con un uiTextView



xcode6 uikeyboard (5)

Agregue UITextViewDelegate a su clase y luego configure su delegado para su textView o su textField en viewDidLoad. Debería verse así:

// in viewDidLoad textField.delegate = self textView.delegate = self

Swift 3

// hides text views func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { if (text == "/n") { textView.resignFirstResponder() return false } return true } // hides text fields func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { if (string == "/n") { textField.resignFirstResponder() return false } return true }

Swift 2.0

La siguiente sintaxis ha sido probada para Swift 1.2 y Swift 2.0

func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool { if(text == "/n") { textView.resignFirstResponder() return false } return true }

Estoy seguro de que esto no es tan difícil, pero tengo problemas para encontrar información sobre cómo descartar un teclado con la tecla de retorno / listo usando una vista de texto, no un campo de texto. Esto es lo que he intentado hasta ahora (que funciona con un campo de texto).

Muchas gracias de antemano por cualquier ayuda!

// PostTravelQuestion.swift class PostTravelQuestion: UIViewController, UITextViewDelegate { @IBAction func closepostpage(sender: AnyObject) { dismissViewControllerAnimated(true, completion: nil) } @IBOutlet var postquestion: UITextView! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. postquestion.delegate = self } self addDoneToolBarToKeyboard:self.textView /*func textViewShouldEndEditing(textView: UITextView) -> Bool { textView.resignFirstResponder() return true }*/ /*override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { postquestion.resignFirstResponder() self.view.endEditing(true) }*/ override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } func textViewShouldReturn(textView: UITextView!) -> Bool { self.view.endEditing(true); return true; } }


El siguiente código cerrará el teclado cuando haga clic en la tecla regresar / listo en UITextView .

En Swift 3.0

import UIKit class ViewController: UIViewController, UITextViewDelegate { @IBOutlet var textView: UITextView! override func viewDidLoad() { super.viewDidLoad() textView.delegate = self } func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { if(text == "/n") { view.endEditing(true) return false } else { return true } }

En Swift 2.2

func textView(textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { if text == "/n" { view.endEditing(true) return false } else { return true } }


Esto funciona para mi:

import UIKit class ViewController: UIViewController, UITextViewDelegate { @IBOutlet weak var textView: UITextView! override func viewDidLoad() { super.viewDidLoad() textView.delegate = self } /* Updated for Swift 4 */ func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { if(text == "/n") { textView.resignFirstResponder() return false } return true } /* Older versions of Swift */ func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool { if(text == "/n") { textView.resignFirstResponder() return false } return true } }


La manera más fácil y mejor de hacer esto usando la Extensión UITextView.
Crédito: http://www.swiftdevcenter.com/uitextview-dismiss-keyboard-swift/
Su clase ViewController

class ViewController: UIViewController { @IBOutlet weak var myTextView: UITextView! override func viewDidLoad() { super.viewDidLoad() // 1 self.myTextView.addDoneButton(title: "Done", target: self, selector: #selector(tapDone(sender:))) } // 2 @objc func tapDone(sender: Any) { self.view.endEditing(true) } }

Agregar extensión UITextView

extension UITextView { func addDoneButton(title: String, target: Any, selector: Selector) { let toolBar = UIToolbar(frame: CGRect(x: 0.0, y: 0.0, width: UIScreen.main.bounds.size.width, height: 44.0))//1 let flexible = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)//2 let barButton = UIBarButtonItem(title: title, style: .plain, target: target, action: selector)//3 toolBar.setItems([flexible, barButton], animated: false)//4 self.inputAccessoryView = toolBar//5 } }

Para más detalles: http://www.swiftdevcenter.com/uitextview-dismiss-keyboard-swift/


para ocultar el toque del teclado en cualquier parte fuera del cuadro de texto o las vistas de texto en swift 4, use esta tranquilidad de código en la clase ViewController:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { view.endEditing(true) super.touchesBegan(touches, with event: event) }

Saludos