如何在 NSApplicationDelegate 上加载 NSViewController

Posted

技术标签:

【中文标题】如何在 NSApplicationDelegate 上加载 NSViewController【英文标题】:How to load NSViewController on a NSApplicationDelegate 【发布时间】:2015-12-19 16:49:55 【问题描述】:

我正在尝试在我的 appDelegate 类上加载 ViewController。像这样:

class AppDelegate: NSObject, NSApplicationDelegate 

  @IBOutlet weak var window: NSWindow!

  var viewController = HomeViewController()

  func applicationDidFinishLaunching(aNotification: NSNotification) 
     self.window.backgroundColor = NSColor(rgba: "#02303A")
     self.viewController.view.frame = CGRectMake(0, 0, CGRectGetWidth(self.window.frame), CGRectGetHeight(self.window.frame))
     self.window.contentView?.addSubview(self.viewController.view)
  


我的视图控制器很简单,只是:

import PureLayout

class HomeViewController : NSViewController 

  let search : NSSearchField = 
    let search = NSSearchField.newAutoLayoutView()
    return search
  ()

  override func loadView() 
    super.loadView()
    self.view.layer?.backgroundColor = NSColor.blackColor().CGColor
    self.view.addSubview(search)
  


但是当我编译项目时,日志返回:

带有完整源代码的仓库:Github

有人知道可以是什么吗?我在我的 ios 项目上执行此操作,并且效果很好。

【问题讨论】:

【参考方案1】:
    您没有属于您的视图控制器的 xib 文件,因此第一步是为 视图添加一个新文件:

    在您新创建的 xib 文件中,选择 File's Owner 占位符,然后在 Inspector 中,将其自定义类设置为您的视图控制器子类:

    最后,将视图控制器 (文件的所有者)view 出口连接到自定义视图对象。

(在此视图中为视图控制器构建用户界面,而不是在主 nib 中。)

【讨论】:

以上是关于如何在 NSApplicationDelegate 上加载 NSViewController的主要内容,如果未能解决你的问题,请参考以下文章

UIApplicationDelegate 与 NSApplicationDelegate、MainMenu.xib

从 ShouldTerminate 返回 NSTerminateLater 后,NSApplicationDelegate 没有延迟调用?

如何确认 AppDelegate 的 ObservableObject?

无法在自定义 NSViewController 中注册鼠标事件

CBCentralManager 状态总是关闭

添加到OS X状态托盘