我正在尝试在ViewController中设置模态表的位置。 到目前为止我得到的是:
import Cocoa
class ViewController: NSViewController, NSWindowDelegate {
func window(_ window: NSWindow, willPositionSheet sheet: NSWindow, using rect: NSRect) -> NSRect {
print("function entered")
}
var sheetWindowController: SheetWindowController!
@IBAction func showSheet(_ sender:AnyObject){
let windowController = SheetWindowController(windowNibName: "SheetWindowController")
self.sheetWindowController = windowController
self.sheetWindowController.delegate = self
self.view.window?.beginSheet(self.sheetWindowController.window!, completionHandler: nil)
}
override func viewDidLoad() {
super.viewDidLoad()
self.view.window?.delegate = self
}
}
当工作表显示在窗口顶部时,它正在工作。但willPositionSheet
方法不会被调用。知道缺少什么吗?
答案 0 :(得分:1)
2件事。
首先:您的视图控制器view
的{{1}}属性在window
之前可能不会是非空的(您可以通过调试断点来验证窗口是否为非零)。因此,请确保委托实际上是在窗口上设置的。我还要注意,您可能希望尝试将窗口委托与窗口的控制器对象绑定,或者使用不属于视图控制器的不同窗口委托对象。视图控制器是一个奇怪的地方放置这个逻辑。
第二:呈现由viewDidAppear()
拥有的窗口似乎由于某种原因没有得到这些回调(我测试时只是传递了一个标准的NSWindowController
对象,并且委托收到了{{ 1}}来电)。不知道为什么会出现这种情况,但我猜测这些窗口是如何设置的。话虽如此,您可以尝试使用较新的(10.10)NSWindow
演示API,让您的生活更轻松。我会尝试使用willPositionSheet
的{{1}}来展示NSViewController
。
总而言之,你可以有类似的东西:
NSViewController
并提出:
NSViewController
希望这有点帮助。