- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个带有(几个)SplitViewItems 的SplitView。 Echt SplitViewItem 有一个 ViewController,其中包含多个 View 。
我需要检测哪个 SplitViewItems 具有用户的焦点。
例如:如果用户单击任何控件/ View (或以任何其他方式导航到它),则包含该 View 项的 SplitViewItem 的背景应该更改。由于我不知道 SplitViewItem 中的 ViewController 中将包含哪些/多少个 View ,因此我更愿意检测哪个 SplitViewItem 是 SplitViewController 中的“事件” View 。
我一整天都在寻找解决方案。我找不到任何类型的通知,也找不到解决管理响应者链的方法。
有人能给我指出正确的方向吗?非常感谢(快速)代码示例。
谢谢!
最佳答案
我花了相当多的研究,但我找到了一个可行的解决方案。不是最优雅的,但很有效。
我发现最好的方法是将事件监视器添加到 SplitViewController。
在viewDidLoad()中添加以下代码:
NSEvent.addLocalMonitorForEvents(matching: [.keyDown, .leftMouseDown, .flagsChanged]) { [unowned self] (theEvent) -> NSEvent? in
let eventLocation = theEvent.locationInWindow
let numberOfSplitViews = self.splitViewItems.count
var activeIndex: Int?
for index in 0..<numberOfSplitViews {
let view = self.splitViewItems[index].viewController.view
let locationInView = view.convert(eventLocation, from: nil)
if ((locationInView.x > 0) && (locationInView.x < view.bounds.maxX) && (locationInView.y > 0) && (locationInView.y < view.bounds.maxY)) {
activeIndex = index
break
}
}
switch theEvent.type {
case .keyDown:
print("key down in pane \(activeIndex)")
self.keyDown(with: theEvent)
case .leftMouseDown, .rightMouseDown:
print("mouse down in pane \(activeIndex)")
self.mouseDown(with: theEvent)
case .flagsChanged:
print("flags changed in pane \(activeIndex)")
self.flagsChanged(with: theEvent)
default:
print("captured some unhandled event in pane \(activeIndex)")
}
return theEvent
}
(您可能需要根据自己的喜好调整相关事件。此外,您可能需要使用 NSEvent.removeMonitor(_:) 删除监视器)。
此外(超出了这个问题的范围),您可能还需要考虑使变量 activeIndex 成为可观察的类变量(我使用 RxSwift 完成此操作),以便您可以轻松地对“事件 Pane ”内发生的任何更改使用react'。
欢迎任何更优雅/简单的解决方案!
关于swift - 检测事件的 NSSplitViewItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53342848/
我有一个带有(几个)SplitViewItems 的SplitView。 Echt SplitViewItem 有一个 ViewController,其中包含多个 View 。 我需要检测哪个 Spl
我正在尝试自学 OSX 应用程序开发,这样我就可以改掉自己所有的坏习惯 8)。 可能是无关信息 我有一个可以成功运行的试用应用程序 - 它根据用户通过 slider 输入的内容调整自身大小。 执行此操
我正在尝试像这样折叠 NSSplitViewItem NSAnimationContext.runAnimationGroup({ context in context.duration =
我有一个继承自 NSSplitViewController 并覆盖 splitViewDidResizeSubviews 函数的类。 当我在 NSSplitViewController 中的 NSSp
我正在尝试使(10.10 中的新功能)NSSplitViewItem 折叠和展开,同时移动它的包含窗口,以便将整个东西保持在“原位”。 问题是我在动画中出现抽搐(如 here 所示)。 我进行折叠的代
我创建了一个新的空 Xcode 项目。只需将 NSSplitViewController 添加到 Storyboard,如下所示。 我运行了该应用程序,发现主窗口如下所示。 左分割 View 默认折叠
XIB 是否支持 NSSplitViewController/NSSplitViewItem?我只看到 NSSplitView 我可以拖放 NSViewController 并将其子类化为 NSSpl
几乎所有 macOS 官方应用程序都有此工具栏的功能,NSToolbarItem灵活空间受限于 NSSplitViewItem看法。我首先想到 NSToolbar 上可能有 3 个不同的部分。但它只是
我是一名优秀的程序员,十分优秀!