我的窗口中有一个 NSTextField 对象,单击复选框时必须禁用该对象。
我编写了一个 IBAction 来接收复选框单击并根据复选框状态禁用/启用文本字段。
[mName setEnabled: [mNameCheck state]];
这可以很好地实现基本功能,但我发现了一些奇怪的行为。
您更新了文本字段中的一些详细信息,然后单击文本字段中的复选框以禁用旧内容。
示例:
- 第 1 阶段:提交的文本包含内容 “姓名”
- 第 2 阶段:更新提交的文本 内容为“Girish”
- 第 3 阶段:单击复选框(以禁用 提交的文本)
- 第 4 阶段:禁用文本字段 内容为“名称”
如果我在禁用文本字段之前退出响应程序并将响应程序设置为其他 Controller ,问题就会得到解决。
就我而言,我无法将响应者分配给复选框(它不需要)或任何其他 Controller ,所以我做了一些像下面这样工作正常的事情
[mName resignFirstResponder];
[mName becomeFirstResponder];
辞职并为响应者分配同一控制者。
我只是想知道这个解决方案是否正确或者是否有更好的解决方案?
最佳答案
正如文档所述,不要直接调用 -resignFirstResponder
或 -becomeFirstResponder
。改为调用 -[NSWindow makeFirstResponder:]
。传入 nil 是可以接受的,状态将传递到窗口本身。
您可以尝试调用 -[NSWindow selectNextKeyView:]
虽然我不完全确定如果找不到有效的下一个关键 View 会发生什么。尝试一下看看。如果这不起作用,您将不得不自行调用 -nextValidKeyView
和 -makeFirstResponder
。
关于objective-c - NSTextField 设置启用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2271908/