SwiftUI macOS 如何新建一个Windows窗口并显示 教程含源码
SwiftUI macOS 如何新建一个Windows窗口并显示 教程含源码
本人实践完成的效果
看完本文您将掌握的技能
- 掌握创建新Windows方法
- 实现SwiftUI原生调用
基础知识
NSHostingController
托管SwiftUI视图层次结构的AppKit视图控制器。
class NSHostingController<Content> where Content : View
总览
当您要将SwiftUI视图集成到AppKit视图层次结构中时,创建一个对象。在创建时,指定要用作此视图控制器的根视图的SwiftUI视图;您可以稍后使用属性更改该视图。通过将其呈现为子视图控制器或将其嵌入到界面中,可以像使用其他任何视图控制器一样使用托管控制器。NSHostingControllerrootView.
主题
创建一个主机控制器对象
1、init(rootView: Content)
创建一个宿主控制器对象,该对象包装指定的SwiftUI视图。
2、init?(coder: NSCoder, rootView: Content)
从档案和指定的SwiftUI视图创建托管控制器对象。
3、init(nibName: NSNib.Name?, bundle: Bundle?)
根据指定的nib文件的内容创建托管控制器对象。
4、init?(coder: NSCoder)
根据指定档案的内容创建一个托管控制器对象。
获取根视图
6、var rootView: Content
此视图控制器管理的SwiftUI视图层次结构的根视图。
配置界面外观
7、func sizeThatFits(in: CGSize) -> CGSize
计算并返回当前视图的最合适大小。
比较视图控制器
8、static func == (NSObject, NSObject) -> Bool
返回一个布尔值,该值指示两个值是否相等。NSObject通过调用实现此功能。lhs.isEqual(rhs)
9、static func != (NSHostingController, NSHostingController) -> Bool
获取哈希信息
10、var hashValue: Int
哈希值。
11、func hash(into: inout Hasher)
通过将这些值的必需成分输入给定的哈希值来对其进行哈希处理。
结构
12、struct KeyValueObservingPublisher
当符合KVO的属性的值更改时发出事件的发布者。
struct TransitionOptions
实例属性
var identifier: NSUserInterfaceItemIdentifier?
代码
import SwiftUI
import Cocoa
struct ContentView: View {
var body: some View {
VStack{
Spacer()
Button("打开新窗口"){
let detailView = DetailView()
let controller = DetailWC(rootView: detailView)
controller.window?.title = "新窗口"
controller.showWindow(nil)
}
Spacer()
Divider()
}
.frame(width: 600, height: 500)
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
class DetailWC<RootView : View>: NSWindowController {
convenience init(rootView: RootView) {
let hostingController = NSHostingController(rootView: rootView.frame(width: 400, height: 500))
let window = NSWindow(contentViewController: hostingController)
window.setContentSize(NSSize(width: 400, height: 500))
self.init(window: window)
}
}
struct DetailView: View {
var body: some View {
VStack{
Spacer()
Text("我是新窗口")
Spacer()
}
}
}