我的应用程序中有一个带有多个按钮的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];
}


非常欢迎评论这是否是最好的方法。

09-30 00:20