我的应用程序中有一个带有多个按钮的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
上单击两次以重新获得焦点。关于如何解决此问题的任何建议?谢谢。 最佳答案
我找到了对我有用的解决方案。我将我的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];
}
非常欢迎评论这是否是最好的方法。