UITextView数据变化迅速

use*_*519 37 uitextview ios swift

如何检测UITextViewwith中的数据更改Swift?以下代码不进行任何检测.

我宣布UITextView:

@IBOutlet weak var bodyText: UITextView!

optional func textViewDidChange(_ textView: UITextView!) {
    println(bodyText.text)
}
Run Code Online (Sandbox Code Playgroud)

谢谢斯科特

Ser*_*kar 90

您需要设置UITextView 委托并在其中实现textViewDidChange:方法.不幸的是,我不知道是否可以在线获得快速文档.所有链接都转到objective-c文档.

代码如下所示:( 针对SWIFT 4.2更新)

class ViewController: UIViewController, UITextViewDelegate { //If your class is not conforms to the UITextViewDelegate protocol you will not be able to set it as delegate to UITextView

    @IBOutlet weak var bodyText: UITextView!

    override func viewDidLoad() {
        super.viewDidLoad()
        bodyText.delegate = self //Without setting the delegate you won't be able to track UITextView events
    }

    func textViewDidChange(_ textView: UITextView) { //Handle the text changes here
        print(textView.text); //the textView parameter is the textView where text was changed
    }
}
Run Code Online (Sandbox Code Playgroud)


Luc*_*hwe 6

就我而言,我希望实现独立于 UIViewController,因此我不需要仅为文本更改分配委托。或者甚至可能对 UITextView 进行某种验证,并且您希望每个字段都包含它,而不是管理大量复杂逻辑的委托。

它需要继承 UITextView,但它非常值得 imo:

class TextView: UITextView {

    convenience init() {
        self.init(frame: CGRect.zero, textContainer: nil)
        NotificationCenter.default.addObserver(self, selector: #selector(textDidChangeNotification), name: UITextView.textDidChangeNotification , object: nil)
    }

    deinit {
        NotificationCenter.default.removeObserver(self)
    }

    @objc func textDidChangeNotification(_ notif: Notification) {
        guard self == notif.object as? UITextView else {
            return
        }
        textDidChange()
    }

    func textDidChange() {
        // the text in the textview just changed, below goes the code for whatever you need to do given this event

        // or you can just set the textDidChangeHandler closure to execute every time the text changes, useful if you want to keep logic out of the class
        textDidChangeHandler?()
    }

    var textDidChangeHandler: (()->Void)?

}
Run Code Online (Sandbox Code Playgroud)


cod*_*ter 5

设置delegateUITextView.Refer UITextViewDelegate

写下来 viewDidLoad

bodyText!.delegate = self
Run Code Online (Sandbox Code Playgroud)