我有一个NSTextView
,NSScrollView
我正在以编程方式插入一个NSView
子类作为NSTextView
. 这NSView
充当叠加层,叠加有关其下方文本的图形信息。
我认为它工作得很好,直到我注意到文本视图不响应右键单击。其他操作(编辑、选择)似乎工作得很好。
此外,如果第一响应者更改为滚动视图的同级(例如大纲视图),则文本视图不会通过单击它重新获得第一响应者状态。选择会随着点击而改变,但选择高亮是灰色而不是蓝色(表明文本视图不是第一响应者)。
如果我偏移覆盖子视图的框架,文本视图在没有被覆盖层重叠的区域中的行为正常为 100%,但重叠区域的行为不正确,如上所述。
在 Mac OS X 10.6.4 上复制此行为的步骤:
- 创建一个普通的旧的非基于文档的 Cocoa 应用程序。
- 将“NSTextView”IBOutlet 添加到应用委托.h。
NSTextView
在 MainMenu.xib 的窗口中添加一个。连接 textView 插座。- 输入一段代码:
在applicationDidFinishLaunching:
NSView *overlay = [[NSView alloc] initWithFrame:textView.bounds];
[textView addSubview:overlay];
[overlay release];
运行应用程序,观察文本区域中的右键单击无法正常工作,但您仍然可以与文本视图交互。
接下来,在 xib 中的窗口中添加一个 NSOutlineView。请注意,一旦焦点离开文本区域(如果单击大纲视图)并覆盖到位,您就无法将焦点设置回文本视图(它不会再次成为第一响应者)。
NSTextView
即使我的NSView
覆盖不接受第一响应者或鼠标事件,有什么方法可以让我接收所有事件?我怀疑这可能与字段编辑器有关——也许它忽略了它认为注定要发送到覆盖视图的事件?