问题描述
我的应用程序中有一个自定义的“标题”,带有隐藏的标题栏。
如何将标题(一个简单的UIView)设置为移动窗口的句柄区域?
解决方法
就我而言,我有一个自定义UINavigationController
,我需要覆盖touchesBegan
,但在您的情况下采用以下代码应该很容易。
我们得到NSWindow
对象,该对象在Mac Catalyst中不直接可用,然后在导航栏收到触摸时执行拖动事件。您可以在其他任何视图上使用它,而不必是UINavigation
项。
public extension UIResponder {
func performMacCatalystWindowDrag() {
#if targetEnvironment(macCatalyst)
guard let nsApp = ((NSClassFromString("NSApplication") as? NSObject.Type)?.value(forKey: "sharedApplication") as? NSObject),let currentEvent = nsApp.value(forKey: "currentEvent") as? NSObject,let nsWindow = currentEvent.value(forKey: "window") as? NSObject else { return }
nsWindow.perform(NSSelectorFromString("performWindowDragWithEvent:"),with: currentEvent)
#endif
}
}
然后在您的自定义导航栏中覆盖touchesBegan
override func touchesBegan(_ touches: Set<UITouch>,with event: UIEvent?) {
performMacCatalystWindowDrag()
super.touchesBegan(touches,with: event)
}
上面的代码不属于我,请点击here查看更多信息。