具体来说,它在文本字段焦点上的表现是不一致的。
我有一个LSUIElement弹出状态菜单。在该菜单中,有一个包含文本字段的视图。该文本字段需要可选择 - 不一定是默认选择的,但可以选择任何一个。
当单击状态项时,它会触发
[NSApp activateIgnoringOtherApps:YES];
它能够正常工作,但成功率只有一半。另外一半时间,状态菜单似乎认为自己处于“后台”,即使我点击文本框也无法将焦点放在上面。(我知道状态项目的点击触发器正在运行,因为它上面有一个NSLog。)
这是苹果处理这些状态项目的方式有bug,还是我没有正确使用activateIgnoringOtherApps?
*实际上,它似乎只会在切换到另一个应用程序后第一次失败。之后它就可以正常工作了。
完整代码片段:
-(void)statusItemClicked:(id)sender {
//show the popup menu associated with the status item.
[statusItem popUpStatusItemMenu:statusMenu];
//activate *after* showing the popup menu to obtain focus for the text field.
[NSApp activateIgnoringOtherApps:YES];
}
activateIgnoringOtherApps:
方法会在popUpStatusItemMenu:
方法调用后立即被调用吗,还是说该方法要等到菜单关闭才返回?您可以尝试设置断点,通过调试器运行以查看发生的情况。 - Alex