[英]macOS application like Photos.app on macOS
我正在尝试创建像Photos.app这样的macOS应用。 NSWindowController
有一个带分段控件的工具栏。 当您点击分段控件时,它会更改NSWindowController
的NSViewController
。
到目前为止我所拥有的是带有NSViewController
的NSWindowController
。 我已经将NSWindowController
子类化了,其中我有一个方法,只要用户点击分段控件就会调用它。
基本上,无论单击哪个段,它都将实例化所需的视图控制器并将其设置为NSWindowController
的contentViewController
属性。
这是正确的做法吗?
此外,我想, NSWindowController
应该具有每个NSViewController
的属性,它可以切换到延迟加载(当用户点击它们时加载它们并且它们被保留以重新用于防止重新初始化)。
码:
import Cocoa
class MainWindowController: NSWindowController
{
var secondaryViewController:NSViewController?
override func windowDidLoad()
{
super.windowDidLoad()
// Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
}
@IBAction func segmentedControlDidChange(_ sender: NSSegmentedControl)
{
print("Index: \(sender.selectedSegment)")
if sender.selectedSegment == 3 {
if secondaryViewController == nil {
let viewController = storyboard?.instantiateController(withIdentifier: "SecondaryViewController") as! NSViewController
secondaryViewController = viewController
}
self.window?.contentViewController = self.secondaryViewController
}
}
}
我是macOS开发的新手,但是,我已经做了很长一段时间的iOS。 如果有更好的方法,我想了解它。 谢谢!!!
要将标签/分段控件移动到标题栏,您需要:
隐藏标题:
class TopLevelWindowController: NSWindowController { override func windowDidLoad() { super.windowDidLoad() if let window = window { // reminder like style // window.titlebarAppearsTransparent = true window.titleVisibility = .hidden // window.styleMask.insert(.fullSizeContentView) } } }
现在,工具栏将合并到顶部栏位置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.