NSTextField setEnabled

时间:2010-02-16 09:53:47

标签: objective-c cocoa

我的窗口中有一个NSTextField对象,单击复选框时必须禁用该对象。

我已经写了一个IBAction来接收复选框点击并禁用/启用基于复选框状态的文本。

[mName setEnabled: [mNameCheck state]];

这项工作与基本功能很好,但我发现了一些奇怪的行为。

您更新了文本字段中的一些详细信息,然后单击复选框,文本字段将被禁用旧内容。

示例:

  • 第1阶段:提交的文字包含内容 “名称”
  • 第2阶段:更新文本字段 内容为“Girish”
  • 第3阶段:单击复选框(禁用 提交的文本)
  • 第4阶段:文本字段禁用 内容为“姓名”

如果我在禁用文本字段之前辞退响应者并将响应者设置为其他控制器,则问题得到解决。

在我的情况下,我不能将响应者分配给复选框(它不需要)或任何其他控制器,所以我做了一些像贝洛一样的工作正常

[mName resignFirstResponder];
[mName becomeFirstResponder];

辞职并为响应者分配相同的控制器。

我只是想知道这个解决方案是否正确或是否有更好的解决方案?

2 个答案:

答案 0 :(得分:3)

正如文档所述,不要直接致电-resignFirstResponder-becomeFirstResponder。请致电-[NSWindow makeFirstResponder:]。传递nil是可以接受的,状态将传递给窗口本身。

您可以尝试调用-[NSWindow selectNextKeyView:],但我不完全确定如果找不到有效的下一个关键视图会发生什么。试试看吧。如果这不起作用,您将不得不回到自己致电-nextValidKeyView-makeFirstResponder

答案 1 :(得分:0)

如果在Interface Builder中将文本字段设置为连续,则只要在字段中进行更改而不是失去焦点,就会设置字段的值。您可以使用[yourTextField setContinuous:YES]以编程方式设置此值。