gpt4 book ai didi

cocoa - 如何使用显式 NSLayoutManager、NSTextStorage、NSTextContainer 以编程方式设置 NSTextView?

转载 作者:搜寻专家 更新时间:2023-10-30 22:35:50 25 4
gpt4 key购买 nike

按照苹果文档,我试图通过它的两个构造函数方法设置一个简单的 NSTextView

我将下面的代码放在内容 View 的 View Controller 的 viewDidAppear 方法中。 textView 是 NSTextView 的实例,frameRect 是内容 View 的框架。

以下 Swift 代码有效(给我一个可编辑的 textView,文本显示在屏幕上):

    textView = NSTextView(frame: frameRect!)
self.view.addSubview(textView)
textView.textStorage?.appendAttributedString(NSAttributedString(string: "Hello"))

以下不起作用( TextView 不可编辑且屏幕上不显示文本):

    var textStorage = NSTextStorage()
var layoutManager = NSLayoutManager()
textStorage.addLayoutManager(layoutManager)
var textContainer = NSTextContainer(containerSize: frameRect!.size)
layoutManager.addTextContainer(textContainer)
textView = NSTextView(frame: frameRect!, textContainer: textContainer)

textView.editable = true
textView.selectable = true
self.view.addSubview(textView)

textView.textStorage?.appendAttributedString(NSAttributedString(string: "Hello more complex"))

我在第二个例子中做错了什么?我正在尝试遵循 Apple 的“Cocoa Text Architecture Guide”中给出的示例,他们在其中讨论了通过显式实例化其辅助对象网络来设置 NSTextView

最佳答案

您需要保留对您创建的 NSTextStorage 变量的引用。我不太确定这一切的机制,但看起来 TextView 只保留对其文本存储对象的弱引用。一旦这个对象超出范围,它就不再可用于 TextView 。我想这与 MVC 设计模式保持一致,其中 View (在本例中为 NSTextView)应该独立于它们的模型(NSTextStorage 对象)。

import Cocoa

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {

@IBOutlet weak var window: NSWindow!

var textView: NSTextView!
var textStorage: NSTextStorage! // STORE A REFERENCE

func applicationDidFinishLaunching(aNotification: NSNotification) {
var view = window.contentView as NSView
textStorage = NSTextStorage()
var layoutManager = NSLayoutManager()
textStorage.addLayoutManager(layoutManager)
var textContainer = NSTextContainer(containerSize: view.bounds.size)
layoutManager.addTextContainer(textContainer)
textView = NSTextView(frame: view.bounds, textContainer: textContainer)

textView.editable = true
textView.selectable = true
view.addSubview(textView)

textView.textStorage?.appendAttributedString(NSAttributedString(string: "Hello more complex"))
}
}

关于cocoa - 如何使用显式 NSLayoutManager、NSTextStorage、NSTextContainer 以编程方式设置 NSTextView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29035431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com