【问题标题】:Resize windows Event调整窗口大小事件
【发布时间】:2016-02-28 20:45:13
【问题描述】:

我正在创建一个简单的操作系统应用程序,但我找不到任何地方如何接受调整大小事件。

假设我想打印新的宽度和高度并且我有这个控制器:

class ViewController: NSViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }
    override var representedObject: AnyObject? {
        didSet {
            // Update the view, if already loaded.
        }
    }

}

我要补充什么?谢谢你。

我的问题和Listen for window resize event in Swift / Objective-C不一样。由于我的视图必须扩展 NSViewController 而不是 NSWindowController。在他的回答中,他没有解释 windowWillResize 必须准确返回什么

【问题讨论】:

  • 不,不是,他的代码不起作用!

标签: swift cocoa


【解决方案1】:

Swift 4 - macOS 10.13

class ViewController: NSViewController, NSWindowDelegate {

    override func viewDidAppear() {
        view.window?.delegate = self
    }

    func windowDidResize(_ notification: Notification) {
        // This will print the window's size each time it is resized.
        print(view.window?.frame.size)
    }
}

【讨论】:

  • 请注意,这是 'viewDidAppear' 而不是 viewDidLoad,它在 WindowController 的 windowDidLoad 之前调用 ,因此不起作用。 (我不知道为什么我从来没有想过让 viewController 成为 Window 的代表。这简化了事情。)
【解决方案2】:

您需要在某处实现NSWindowDelegate,并将窗口的委托设置为该对象。如果你愿意,你可以在你的视图控制器中实现这个代码。

class ViewController: NSViewController, NSWindowDelegate {
    override func viewWillAppear() {
        self.view.window.delegate = self
    }

    func windowWillResize(sender: NSWindow, toSize frameSize: NSSize) -> NSSize {
        // Your code goes here
    }

    func windowDidResize(notification: NSNotification) {
        // Your code goes here
    }
}

【讨论】:

  • self.view.window 为零
  • 我认为到那时窗口已经被连接了 - 也许试试 viewDidAppear 中的代码。
猜你喜欢
  • 2014-04-06
  • 1970-01-01
  • 2010-10-13
  • 2017-04-26
  • 2018-12-13
  • 2016-06-02
相关资源
最近更新 更多