NSTextView 不会成为第一响应者

Posted

技术标签:

【中文标题】NSTextView 不会成为第一响应者【英文标题】:NSTextView won't become first responder 【发布时间】:2012-07-15 01:20:49 【问题描述】:

这是我的小测试应用程序的布局:

    AppDelegate 拥有 WindowControllerWindowController 拥有 CustomTextContainerViewCustomTextContainerView 拥有一个 NSScrollView,它嵌入了 MyCustomTextView(一个 NSTextView 子类)。

标准MainMenu 和我的窗口控制器的xib 都比较空。我的窗口控制器的-windowDidLoad 看起来像这样:

- (void)windowDidLoad 
    [super windowDidLoad];
    // create CustomTextContainerView
    [[self window] setContentView:self.customTextContainerView];

我想要做的是设置第一响应者到 textView,但我已经尝试了我能想到的一切来让它工作。

我已经做到了,所以 CustomTextContainerView 只是将 -becomeFirstResponder 转发到它的 textView。我试过直接在容器和 textView 上调用它,但我不能让它自动成为第一响应者。

注意:用户仍然可以单击文本区域并开始输入,但我要做的是自动设置第一响应者状态,因此我不必在开始之前单击打字。我错过了什么?

【问题讨论】:

【参考方案1】:

要强制窗口的第一响应者,调用这个:

[[self window] makeFirstResponder:self.customTextContainerView];

(这假设所有其他必要的第一响应者状态都已启用,例如,视图不能覆盖 acceptsFirstResponder 以返回 NO。)

【讨论】:

解决方案(我实际上是独立找到的:))最终是在窗口上调用它将我的容器视图添加为窗口@987654324 的子视图的组合@ 而不是将其设置为 contentView.

以上是关于NSTextView 不会成为第一响应者的主要内容,如果未能解决你的问题,请参考以下文章

当新的 NSTextView 成为 FirstResponder (MacOS) 时如何移动光标?

哪个 NSTextView 是第一响应者?

NSTextView 撤消/重做属性更改(当不是第一响应者时)

NSTextView:在故事板应用程序中辞职第一响应者

Subview 不会成为第一响应者

UITextField 成为第一响应者后,UITableView 不会调整大小