我在 NSPopover 中有一个 NSSearchField。单击 NSStatusBar 项时将打开此弹出窗口。
在我的 NSPopover View Controller 的 viewWillAppear()
中,我在 NSSearchField 上调用 self.view.window?.makeFirstResponder(searchField)
。我希望在弹出窗口出现时可以编辑此搜索字段。通过准备编辑,我的意思是用户不必在 NSSearchField 内单击即可开始输入。
此时,我的实现并不总是有效。有时,它会起作用,弹出窗口会打开,搜索字段已准备好,光标会闪烁。然而,大多数时候,尤其是当我打开弹出窗口时在不同的应用程序中编辑文本时,必须单击 NSSearchField 才能进行编辑。
我已经对搜索字段进行了子类化并重写了其 becomeFirstResponder()
方法,并且我可以确认它每次都会被调用。
当字段成为第一响应者时,为什么我无法从其他应用程序“窃取”编辑我的搜索字段的权利?这可能吗?
最佳答案
您应该使用 viewDidAppear:
使搜索字段成为第一响应者。
通常,当调用 viewWillAppear:
时, View 尚未位于 View 层次结构中,因此 window
属性为 nil
(并且您的可选链接不会调用 makeFirstResponder)。
关于swift - 强制 NSSearchField 在成为第一响应者时开始编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34060101/