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