在 SwiftUI 中,可以通过新建一个 SwiftUI 文件来定义APP的入口,SwiftUI 有提供一个 Settings 的 View,可以直接导航至APP 的偏好设置,PreferencesView 是自定义的偏好设置的 SwiftUI 的 View,这个时候通过快捷键 “⌘,” 便可以进入偏好设置页面,使用这个 Settings 确实可以提供一些便利,但是也会出现一些意想不到的问题,这个应该是 SwiftUI 的问题,希望以后会优化吧。
1
2
3
4
5
6
7
8
9
10
import SwiftUI
@main
struct MainAPP: App {
@NSApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
var body: some Scene {
Settings { // 偏好设置,快捷键 "cmd + ,"
PreferencesView()
}
}
}
但是如果需要在其他点击事件时显示偏好设置页面,如果通过把 PreferencesView 加载到 NSPanel 然后显示,这种显示的效果和上面快捷键打开展示的效果有差异。
1
2
3
4
5
6
let panel = NSPanel(contentViewController: NSHostingController(rootView: PreferencesView()))
panel.styleMask = [.closable, .titled, .fullSizeContentView]
panel.titleVisibility = .hidden // 隐藏标题
panel.titlebarAppearsTransparent = true // titlebar 透明
panel.level = .mainMenu
panel.makeKeyAndOrderFront(nil)
这个时候可以通过以下的方式,这种方式打开的偏好设置会和上面快捷键打开的页面是一致的,已经通过苹果APP的审核,没有因为这句代码被拒。
1
NSApp.sendAction(Selector(("showPreferencesWindow:")), to: nil, from: nil)