目标:在watchOS中使用SwiftUI的笔画文本
通过一个故事板项目,

WKInterfaceLabel通过setAttributedText提供了对NSAttributedString的支持,setAttributedText提供了对笔画文本的简单和简单的支持。

但是,在使用SwiftUI的新项目中,

在不存在的故事板之外,WKInterfaceLabel是不可用的:
不要自己创建该类的子类或实例。相反,在接口控制器类中定义出口,并将它们连接到故事板文件中的相应对象。
open class WKInterfaceLabel : WKInterfaceObject {
open func setText(_ text: String?)
open func setTextColor(_ color: UIColor?)
open func setAttributedText(_ attributedText: NSAttributedString?)
}‘'init()’不可用
那么,我们如何在NSAttributedString中使用watchOS和SwiftUI呢?
附带说明:
接下来,我预计新的AttributedString将可靠地取代NSAttributedString,但从watchOS 8和iOS 15开始,AttributedString就是破碎与残缺。这迫使我寻找一种解决方案,在watchOS和SwiftUI中使用SwiftUI。
发布于 2022-01-27 04:07:54
在最新的swiftUI中,您可以使用AttributedString而不是NSAttributedString。
详细说明如何使用它,您可以在苹果文档中找到:https://developer.apple.com/documentation/foundation/attributedstring。
但是,您仍然可以在NSAttributedString应用程序中使用swiftUI应用程序来包装原始NSTextField(macos) / UITextField(IOS)控件。
macos包装器的示例(必须很容易重写):
import SwiftUI
import Cocoa
@available(OSX 11.0, *)
public struct AttributedText: NSViewRepresentable {
private let text: NSAttributedString
private let selectable: Bool
public init(attributedString: NSAttributedString, selectable: Bool = true) {
self.text = attributedString
self.selectable = selectable
}
public func makeNSView(context: Context) -> NSTextField {
let textField = NSTextField(labelWithAttributedString: text)
textField.preferredMaxLayoutWidth = textField.frame.width
textField.allowsEditingTextAttributes = true // Fix of clear of styles on click
textField.isSelectable = selectable
return textField
}
public func updateNSView(_ textField: NSTextField, context: Context) {
textField.attributedStringValue = text
}
}但在大多数情况下,对SwiftUI - AttributedString更好地使用本机方式。
https://stackoverflow.com/questions/70873041
复制相似问题