dismiss keyboard with a uiTextView

后端 未结 5 1421
醉话见心
醉话见心 2020-12-04 11:41

I am sure this is not that difficult, but I am having trouble finding info on how to dismiss a keyboard with the return/done key using a textview, not a textfield. here is w

相关标签:
5条回答
  • 2020-12-04 11:54

    to hide the keyboard touch on any part outside the textbox or textviews in swift 4 use this peace of code in the ViewController class:

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

    Regards

    0 讨论(0)
  • 2020-12-04 11:57

    Add UITextViewDelegate to your class and then set your delegate for your textView or your textField in viewDidLoad. Should look something like this:

    // 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

    The below syntax has been tested for Swift 1.2 & Swift 2.0

    func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
        if(text == "\n") {
            textView.resignFirstResponder()
            return false
        }
        return true
    }
    
    0 讨论(0)
  • 2020-12-04 12:05

    Below code will dismissing the keyboard when click return/done key on UITextView.

    In 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
        }
    }
    

    In 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
        }
    }
    
    0 讨论(0)
  • 2020-12-04 12:05

    Easiest and best way to do this using UITextView Extension.
    Credit: http://www.swiftdevcenter.com/uitextview-dismiss-keyboard-swift/
    Your ViewController Class

    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)
        }
    }
    

    Add UITextView Extension

    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
        }
    }
    

    For more detail: visit full documentation

    0 讨论(0)
  • 2020-12-04 12:16

    This works for me:

    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
        }
    
    }
    
    0 讨论(0)
提交回复
热议问题