首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSSplitViewController不调用委托方法

NSSplitViewController不调用委托方法
EN

Stack Overflow用户
提问于 2020-02-10 20:25:34
回答 1查看 164关注 0票数 1

我使用的是一个NSSplitViewController子类,没有调用委托方法。

这纯粹是以编程的方式,而不使用nib/故事板。

代码可以复制到新项目中。该文件需要命名为main.swift。同时删除项目设置中的“主界面”。

代码语言:javascript
复制
// File: main.swift

import Cocoa

// AppDelegate

class AppDelegate: NSObject, NSApplicationDelegate {

  let window = NSWindow(
    contentRect: NSRect(x: 0, y: 0, width: 600, height: 400),
    styleMask: [ .titled, .closable, .resizable ],
    backing: .buffered,
    defer: false
  )

  func applicationDidFinishLaunching(_ aNotification: Notification) {
    let splitViewController = MySplitViewController()
    window.contentView = splitViewController.view
    window.makeKeyAndOrderFront(nil)
  }

}

// NSSplitViewController

class MySplitViewController: NSSplitViewController {

  convenience init() {
    self.init(nibName: nil, bundle: nil)
    // Left
    let viewController1 = NSViewController()
    viewController1.view = NSView()
    let item1 = NSSplitViewItem(viewController: viewController1)
    item1.minimumThickness = 100
    item1.maximumThickness = 200
    addSplitViewItem(item1)
    // Right
    let viewController2 = NSViewController()
    viewController2.view = NSView()
    let item2 = NSSplitViewItem(viewController: viewController2)
    addSplitViewItem(item2)
  }

  override func viewDidLoad() {
    super.viewDidLoad()
    print(splitView.delegate!)   // Logs "Project1.MySplitViewController"
  }

  // Never called
  override func splitView(_ splitView: NSSplitView, additionalEffectiveRectOfDividerAt dividerIndex: Int) -> NSRect {
    print("\(#function)")
    return super.splitView(splitView, additionalEffectiveRectOfDividerAt: dividerIndex)
  }

}

let application = NSApplication.shared
let applicationDelegate = AppDelegate()

application.delegate = applicationDelegate
application.run()

运行代码时,可以看到拆分视图显示并正常工作。

viewDidLoad()方法打印"Project1.MySplitViewController",因此设置了委托。

但是splitView(_:additionalEffectiveRectOfDividerAt:)方法没有被调用(如果实现的话,也不会调用任何其他NSSplitViewDelegate )。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-11 11:09:08

不调用委托方法,因为MySplitViewController是在applicationDidFinishLaunching的末尾发布的。让AppDelegate保持对MySplitViewController的强烈引用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60157885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档