按下按钮时,NSTextField stringValue不是最新的

tit*_*coy 2 macos cocoa nstextfield

我创建了一个对话框窗口,其中包含NSTextField和NSSecureTextField(用于用户名和密码),以及要提交的NSButton。插座已在Interface Builder中正确连接(非零)。

我在按钮的操作处理程序中检索用户名和密码字段的stringValue。然而:

  • 如果我在密码字段中输入一个字符并按下按钮,则其stringValue为空。
  • 如果我在密码字段('a')中输入字符,将焦点更改为用户名字段,将焦点更改回密码字段,然后输入第二个字符('b'),则密码stringValue为'a'而不是'ab'。

密码字段(以及用户名字段)的stringValue似乎不会在聚焦时更新其值。我尝试了以下方法来纠正此问题,但无济于事:

  • 将文本字段的操作设置为“发送结束编辑”
  • 将文本字段的状态设置为连续
  • 在焦点的文本字段上称为validateEditing
  • 在焦点的文本字段上称为resignFirstResponder
  • 称为[self.window makeFirstResponder:self.window]
  • 在以文本字段作为参数的窗口上称为endEditingFor :(或nil)

tit*_*coy 5

我找到了解决我问题的方法。我在询问其值之前禁用了UITextField。由于某种原因,如果我在禁用它之前要求提供该值,则该值是正确的。

更新:UIControl setEnabled:方法的文档指出,如果其参数为NO,则“任何编辑都将中止”。