选择预测文本并将其添加到文本时,不会触发 iOS textViewDidChange

Posted

技术标签:

【中文标题】选择预测文本并将其添加到文本时,不会触发 iOS textViewDidChange【英文标题】:iOS textViewDidChange is not triggered when predictive text is selected and added to text 【发布时间】:2016-08-01 00:53:01 【问题描述】:

当我点击“Hello”或“He”时,不会触发 textViewDidChange。

如何检测何时选择了预测文本?

【问题讨论】:

从记忆中我认为这是故事板中设置的一个选项 @mthud 要检测使用的预测文本? 我是这么想的,但这是一个模糊的回忆,抱歉我不在我的 Mac 上……值得一看 @Alex 有什么更新吗? 一个关于它的答案***.com/a/22613155/4981515 【参考方案1】:

尝试使用shouldChangeTextInRange 而不是textViewDidChange 我试过了,它是用预测文本触发的

【讨论】:

shouldChangeTextInRange 确实反映了使用自动完成时,但我无法区分光标位置更改和自动完成,因为两个事件触发器 shouldChangeTextInRange【参考方案2】:

你设置了 textView.delegate 吗?

【讨论】:

是的! textViewDidChange 在我输入时被触发,但是当我使用预测文本时,textViewDidChange 不会被触发。【参考方案3】:

当 UITextView 发生变化时,我必须使用 NotificationCenter 来获得通知。 我创建了 UITextView 的扩展来注册/注销这些通知。当您不想再继续处理这些更改时(例如在viewWillDisappear),请记住调用取消注册。

import UIKit

extension UITextView 

    public func registerTextViewNotifications() 
        let center = NotificationCenter.default
        center.addObserver(self,
                           selector: #selector(textViewDidChangeWithNotification(_:)),
                           name: UITextView.textDidChangeNotification,
                           object: nil)
    

    public func unregisterTextViewNotifications() 
        let center = NotificationCenter.default
        center.removeObserver(self,
                              name: UITextView.textDidChangeNotification,
                              object: nil)
    

    @objc private func textViewDidChangeWithNotification(_ notification: Notification) 
        // Do something when edited
        print("Text: \(String(describing: text))")
    



class ViewController: UIViewController 

    @IBOutlet var textView: UITextView!

    override func viewDidLoad() 
        super.viewDidLoad()
    

    override func viewWillAppear(_ animated: Bool) 
        super.viewWillAppear(animated)
        textView.registerTextViewNotifications()
    

    override func viewWillDisappear(_ animated: Bool) 
        super.viewWillDisappear(animated)
        textView.unregisterTextViewNotifications()
    


【讨论】:

【参考方案4】:
    YourViewController<UITextViewDelegate> 设置 textView 后,textView.delegate = self func textViewDidChange(textView: UITextView): func textViewDidChange(textView: UITextView) //textView(Sender) if(textView == yourtextview) //do something

【讨论】:

以上是关于选择预测文本并将其添加到文本时,不会触发 iOS textViewDidChange的主要内容,如果未能解决你的问题,请参考以下文章

如何读取文本文件并将其行添加到 Java 中的数组中?

如何在 Flutter 中运行函数并获取值并将其添加到文本中

Excel:从1个单元格复制文本并将其添加到旁边单元格的顶部

iOS 以编程方式添加 UITextField 在编辑时不会将文本滚动到光标位置

UITextView 在滚动之前不会显示

选择文本时防止 onClick 事件