如何解决SwiftUI:如何打开字体选择器?
我正在使用SwiftUI编写一个带有单个弹出窗口的简单状态栏应用。
是否可以从弹出视图中的按钮启动字体选择器并捕获结果?
该应用程序可在MacOS上运行。我有XCode 11.7
解决方法
我也有同样的问题,最终找到了 this repo,它提供了一个 FontPicker 组件。我附上了下面代码的相关部分,它展示了如何在 SwiftUI 中使用 NSFontPanel。
class FontPickerDelegate {
var parent: FontPicker
init(_ parent: FontPicker) {
self.parent = parent
}
@objc
func changeFont(_ id: Any ){
parent.fontSelected()
}
}
public struct FontPicker: View {
let labelString: String
@Binding var font:NSFont
@State var fontPickerDelegate:FontPickerDelegate? = nil
public init(_ label: String,selection: Binding<NSFont>) {
self.labelString = label
self._font = selection
}
public var body: some View {
HStack {
Text(labelString)
Button(action: {
if NSFontPanel.shared.isVisible {
NSFontPanel.shared.orderOut(nil)
return
}
self.fontPickerDelegate = FontPickerDelegate(self)
NSFontManager.shared.target = self.fontPickerDelegate
NSFontPanel.shared.setPanelFont(self.font,isMultiple: false)
NSFontPanel.shared.orderBack(nil)
},label: {
Image(systemName: "textformat").resizable().scaledToFit()
})
}
}
func fontSelected() {
self.font = NSFontPanel.shared.convert(self.font)
//NSFontPanel.shared.orderOut(nil)
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。