我的应用程序中有一个NSPopover
,带有各种按钮。一个按钮允许用户使用NSSharingService
:
NSArray* array = @[ @"Tweet something"];
NSSharingService* sharingServiceFB = [NSSharingService sharingServiceNamed:NSSharingServiceNamePostOnTwitter];
[sharingServiceFB performWithItems:array];
这很有效,但是当发送或取消推文时,焦点将返回主应用程序(主窗口),而不是NSPopover
。如何将焦点返回到NSPopover
?
我最初的做法是观察NSWindowDidBecomeKeyNotification
,当收到通知并执行以下操作时调用方法
if (self.sheetPopover!=nil){
[self.sheetPopover becomeFirstResponder];
}
然而,这并没有按预期工作,我仍然需要在NSPopover
点击两次才能重新获得焦点。有关如何解决此问题的任何建议?感谢。
答案 0 :(得分:0)
我找到了一个适合我的解决方案。我让NSPopover
成为NSSharingServiceDelegate
的委托,并实现了两个委托方法,当twitter视图关闭时我重置了第一个响应者。在这里,self是NSPopover
视图。
- (void)sharingService:(NSSharingService *)sharingService didShareItems:(NSArray *)items
{
[self becomeFirstResponder];
[[self window] becomeKeyWindow];
[[self window] becomeMainWindow];
}
- (void)sharingService:(NSSharingService *)sharingService didFailToShareItems:(nonnull NSArray *)items error:(nonnull NSError *)error
{
[self becomeFirstResponder];
[[self window] becomeKeyWindow];
[[self window] becomeMainWindow];
}
非常欢迎评论这是否是最佳方法。