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?
Alles anzeigen
Quellcode
- class ViewController: NSViewController, NSTextViewDelegate {
- func textDidChange(_ notification: Notification) {
- print(Date().timeIntervalSince1970, #function)
- }
- var layoutManager: NSLayoutManager!
- override func viewDidLoad() {
- super.viewDidLoad()
- let textStorage = NSTextStorage(attributedString: NSAttributedString(string: "Hallo"))
- self.layoutManager = NSLayoutManager()
- textStorage.addLayoutManager(layoutManager!)
- let textContainer = NSTextContainer(containerSize: CGSize(width: 50, height: 50))
- layoutManager?.addTextContainer(textContainer)
- let textView = NSTextView(frame: CGRect(origin: .zero, size: CGSize(width: 50, height: 50)), textContainer: textContainer)
- view.addSubview(textView)
- textView.delegate = self
- let textContainer2 = NSTextContainer(size: CGSize(width: 50, height: 50))
- let textView2 = NSTextView(frame: CGRect(origin: CGPoint(x: 80, y: 0), size: CGSize(width: 50, height: 50)), textContainer: textContainer2)
- view.addSubview(textView2)
- layoutManager?.addTextContainer(textContainer2)
- let button = NSButton(frame: CGRect(origin: CGPoint(x: 100, y: 100), size: CGSize(width: 50, height: 50)))
- button.target = self
- button.action = #selector(removeTextContainer(_:))
- view.addSubview(button)
- }
- @IBAction func removeTextContainer(_ sender: Any) {
- guard let lastContainer = layoutManager?.textContainers.last, let count = layoutManager?.textContainers.count else {
- return
- }
- lastContainer.textView?.removeFromSuperview()
- layoutManager?.removeTextContainer(at: count - 1 )
- }
- }