gpt4 book ai didi

cocoa - NSTextView 叠加会导致第一响应者状态出现异常

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

我在 NSScrollView 中有一个 NSTextView,并且我以编程方式插入 NSView 子类作为 NSTextView< 的 subview 。这个 NSView 充当覆盖层,叠加有关其下方文本的图形信息。

我认为它工作得很好,直到我注意到 TextView 不响应右键单击。其他操作(编辑、选择)似乎工作得很好。

此外,如果第一响应者更改为 ScrollView 的同级(例如大纲 View ),则 TextView 不会通过单击它来重新获得第一响应者状态。选择将随着点击而改变,但选择突出显示为灰色而不是蓝色(表明 TextView 不是第一响应者)。

如果我偏移叠加层 subview 的框架,则 TextView 在未与叠加层重叠的区域中的行为正常为 100%,但重叠区域的行为不正确,如上所述。

在 Mac OS X 10.6.4 上复制此行为的步骤:

  1. 创建一个普通的旧式非基于文档的 Cocoa 应用程序。
  2. 将“NSTextView”IBOutlet 添加到应用委托(delegate) .h。
  3. NSTextView 添加到 MainMenu.xib 中的窗口。连接textView socket 。
  4. 输入一段代码:

applicationDidFinishLaunching中:

NSView *overlay = [[NSView alloc] initWithFrame:textView.bounds];
[textView addSubview:overlay];
[overlay release];

运行应用程序,观察文本区域中的右键单击无法正常工作,但您仍然可以与 TextView 进行交互。

接下来,将 NSOutlineView 添加到 xib 中的窗口。请注意,一旦焦点离开覆盖层到位的文本区域(如果您单击大纲 View ),您就无法将焦点设置回 TextView (它不会再次成为第一响应者)。

<小时/>

有什么方法可以让 NSTextView 接收其所有事件,即使我的 NSView 叠加层不接受第一响应者或鼠标事件?我怀疑这可能与字段编辑器有关 - 也许它忽略了它认为注定要发生在覆盖 View 上的事件?

最佳答案

您可能需要使覆盖层成为自定义 View 类的实例,该类将所有事件和辅助功能消息转发到 TextView 。您可能还需要将任何 View 相对坐标转换为 TextView 的坐标系。

关于cocoa - NSTextView 叠加会导致第一响应者状态出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4046027/

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