gpt4 book ai didi

cocoa - 即使设置了可编辑行为,也无法在 NSPopover 上编辑 NSTextField

转载 作者:行者123 更新时间:2023-12-03 16:01:44 25 4
gpt4 key购买 nike

我有一个应用程序,它使用 NSTextField 打开弹出窗口。文本字段不可编辑。文本字段的行为设置为可编辑。我仍然可以将文本粘贴和复制到此字段,但无法编辑它。

谁知道,可能出了什么问题?

最佳答案

不确定您是否仍然需要答案,但可能还有其他人仍在寻找答案。我在苹果开发者论坛上找到了解决方案。引用原作者:

主要问题是键盘事件的工作方式。尽管 NSTextField (及其所有 super View )接收键盘事件,但它不会执行任何操作。发生这种情况是因为附加弹出窗口的 View 位于无法成为关键窗口的窗口中。你无法以任何方式访问该窗口,至少我不能。因此,解决方案是使用类别覆盖应用程序中每个 NSWindow 的 canBecomeKeyWindow 方法。

NSWindow+canBecomeKeyWindow.h
@interface NSWindow (canBecomeKeyWindow)

@end

NSWindow+canBecomeKeyWindow.m
@implementation NSWindow (canBecomeKeyWindow)

//This is to fix a bug with 10.7 where an NSPopover with a text field cannot be edited if its parent window won't become key
//The pragma statements disable the corresponding warning for overriding an already-implemented method
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"
- (BOOL)canBecomeKeyWindow
{
return YES;
}
#pragma clang diagnostic pop

@end

这使得弹出窗口完全响应。如果您需要另一个必须对 canBecomeKeyWindow 响应“否”的窗口,您可以随时创建一个子类。

关于cocoa - 即使设置了可编辑行为,也无法在 NSPopover 上编辑 NSTextField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7214273/

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