Question

I have a custom view in a .xib file, which I use as the contentViewController for an MAAttachedWindow. The view has several NSTextFields in it.

When I open the MAAttachedWindow first time, everything is fine. Text shows up in all relevant text fields. Then, if I close the window (which sets it to nil) and then call it again (which reinitializes, using the same custom view as the contentViewController), the last firstResponder text field is now blank.

The strange thing is that if I click the "empty" text field, it shows the correct text. This can be edited, and behaves appropriately as long as this text field has focus. As soon as something else becomes firstResponder, the text vanishes again.

Updates:

  • Changing the color did not change the aforementioned behavior.
  • The text color does not change at any time during this process.
  • Placeholder text also is subject to the aforementioned behavior.
  • No errors are occurring at any time during this process.
  • This does not happen to NSSecureTextFields.
Was it helpful?

Solution 3

I got it!

I simply needed to explicitly remove the viewController from its superview before closing (and subsequently deallocating) the MAAttachedWindow.

OTHER TIPS

I first encountered this problem about 5 years ago with accessory view of a NSSavePanel. The solution that I've found was to move the first responder to the panel itself, before it's closed. Here's my exact method:

- (void)windowDidEndSheet:(NSNotification *)notification

    NSSavePanel *savePanel = [(XSDocument *)[self document] savePanel];
    if (!savePanel)
        return;
    // this fixes a bug where on next opening one of accessory view's text field will be blank and behave strangely
    [savePanel makeFirstResponder:savePanel];
}

Try changing color of textfield text to red color (or any other color) you may get what happens here.

Try resigning all first responders before setting the window to nil.

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