NSTextViewDelegate wird nach Entfernen von NSTextView nicht mehr aufgerufen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • NSTextViewDelegate wird nach Entfernen von NSTextView nicht mehr aufgerufen

    Ich habe ein View mit mehreren NSTextViews, welche über einen NSLayoutManager miteinander verknüpft sind. Soweit funktioniert es wie geplant. Bei Eingabe von Text wird die NSTextViewDelegate ausgeführt. Wenn ich nun mein letztes NSTextView entferne, wird das NSTextViewDelegate nicht mehr ausgeführt. Hat jemand eine Idee, woran das liegen könnte?

    Quellcode

    1. class ViewController: NSViewController, NSTextViewDelegate {
    2. func textDidChange(_ notification: Notification) {
    3. print(Date().timeIntervalSince1970, #function)
    4. }
    5. var layoutManager: NSLayoutManager!
    6. override func viewDidLoad() {
    7. super.viewDidLoad()
    8. let textStorage = NSTextStorage(attributedString: NSAttributedString(string: "Hallo"))
    9. self.layoutManager = NSLayoutManager()
    10. textStorage.addLayoutManager(layoutManager!)
    11. let textContainer = NSTextContainer(containerSize: CGSize(width: 50, height: 50))
    12. layoutManager?.addTextContainer(textContainer)
    13. let textView = NSTextView(frame: CGRect(origin: .zero, size: CGSize(width: 50, height: 50)), textContainer: textContainer)
    14. view.addSubview(textView)
    15. textView.delegate = self
    16. let textContainer2 = NSTextContainer(size: CGSize(width: 50, height: 50))
    17. let textView2 = NSTextView(frame: CGRect(origin: CGPoint(x: 80, y: 0), size: CGSize(width: 50, height: 50)), textContainer: textContainer2)
    18. view.addSubview(textView2)
    19. layoutManager?.addTextContainer(textContainer2)
    20. let button = NSButton(frame: CGRect(origin: CGPoint(x: 100, y: 100), size: CGSize(width: 50, height: 50)))
    21. button.target = self
    22. button.action = #selector(removeTextContainer(_:))
    23. view.addSubview(button)
    24. }
    25. @IBAction func removeTextContainer(_ sender: Any) {
    26. guard let lastContainer = layoutManager?.textContainers.last, let count = layoutManager?.textContainers.count else {
    27. return
    28. }
    29. lastContainer.textView?.removeFromSuperview()
    30. layoutManager?.removeTextContainer(at: count - 1 )
    31. }
    32. }
    Alles anzeigen