gpt4 book ai didi

objective-c - NSPopover 失去第一响应者

转载 作者:行者123 更新时间:2023-11-30 13:51:53 27 4
gpt4 key购买 nike

我的应用程序中有一个带有各种按钮的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 的委托(delegate),并实现了两个委托(delegate)方法,在 Twitter View 关闭时重置第一个响应者。在这里,self 是 NSPopover View 。

- (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];
}

非常欢迎就这是否是最佳方法发表评论。

关于objective-c - NSPopover 失去第一响应者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34161239/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com