swift - 强制 NSSearchField 在成为第一响应者时开始编辑

标签 swift macos nstextfield first-responder nspopover

我在 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/

相关文章:

macos - libtool:链接:不支持的硬编码属性 - 空白 CXX 配置

swift - 如何在 Swift 中使用 switch 语句实现 collectionView 功能?

ios - 如何快速复制 float 缓冲区?

ios - UIBarButton 调用操作后无法更改 UIView.isHidden 属性

ios - 删除表情符号错误

macos - Mac OS X Carbon : What is the difference between SelectWindow vs. ActivateWindow 以及 Cocoa 的等效项是什么

CSS 背景图片在 Chrome 中消失

cocoa - 截断多行 NSTextField 的最后一行

cocoa - 当 NSTextField 内容为 0 时显示空字段

cocoa - NSTextField(标签)属性文本 : Select