繁体   English   中英

像macOS上的Photos.app一样的macOS应用程序

[英]macOS application like Photos.app on macOS

我正在尝试创建像Photos.app这样的macOS应用。 NSWindowController有一个带分段控件的工具栏。 当您点击分段控件时,它会更改NSWindowControllerNSViewController

Apple Photos.app的示例。

到目前为止我所拥有的是带有NSViewControllerNSWindowController 我已经将NSWindowController子类化了,其中我有一个方法,只要用户点击分段控件就会调用它。

基本上,无论单击哪个段,它都将实例化所需的视图控制器并将其设置为NSWindowControllercontentViewController属性。

在此输入图像描述

这是正确的做法吗?

此外,我想, 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。 如果有更好的方法,我想了解它。 谢谢!!!

要将标签/分段控件移动到标题栏,您需要:

  1. 将工具栏添加到窗口,并将控件添加到工具栏,
  2. 隐藏标题:

     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) } } } 
  3. 现在,工具栏将合并到顶部栏位置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM