Question

I have created a dialog window with an NSTextField and an NSSecureTextField (for a username and password), along with an NSButton to submit. The outlets are properly connected in Interface Builder (non-nil).

I am retrieving the stringValue of the username and password fields in the action handler for the button. However:

  • If I enter a character in the password field and press the button, its stringValue is empty.
  • If I enter a character in the password field ('a'), change focus to the username field, change focus back to the password field, and enter a second character ('b'), the passwords stringValue is 'a' rather than 'ab'.

The stringValue of the password field (as well as the username field) appear not to update their value while in focus. I have tried the following to correct this issue, to no avail:

  • Set the text field's Action to "Sent on End Editing"
  • Set the text field's State to Continuous
  • Called validateEditing on the text field in focus
  • Called resignFirstResponder on the text field in focus
  • Called [self.window makeFirstResponder:self.window]
  • Called endEditingFor: on the window with the text field as its argument (or nil)
Was it helpful?

Solution

I found the solution to my problem. I was disabling the UITextField before asking for its value. For some reason, if I ask for the value before disabling it, the value is correct.

Update: The documentation for the UIControl setEnabled: method states that if its argument is NO, "any editing is aborted."

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top