swift - NSSplitViewController 不调用委托方法
问题描述
我正在使用 NSSplitViewController 子类,并且没有调用委托方法。
这纯粹是在没有 nib/storyboard 的情况下以编程方式进行的。
可以将代码复制到新项目中。该文件需要命名为 main.swift。还要删除项目设置中的“主界面”。
// 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,如果已实现)。
解决方案
未调用委托方法,MySplitViewController
因为applicationDidFinishLaunching
. 让我们AppDelegate
对MySplitViewController
.
推荐阅读
- telerik - Telerik 文字处理 - 从 HTML 到 PDF 没有划线
- sql-server - SQL Server: OPENQUERY 用简单的话(举例)
- java - 我无法获取以下 html 代码的 xpath
- javascript - 如何格式化 datetimepicker 可见值
- windows - 如何设置数据网格列的单元格类型?
- angular - createSelector 函数可以获取到 9 个参数
- javascript - 生成 m 个等于 100 但两个数字之间的差必须大于 4 的数字
- python - 使用带有生成器输入的并发期货
- robotframework - Robotframework 字符串运算符 IN
- python - 根据字符数限制字符串中单词的最佳方法是什么