Re: Accepting current edited text field contents
Re: Accepting current edited text field contents
- Subject: Re: Accepting current edited text field contents
- From: Jonathan Taylor <email@hidden>
- Date: Fri, 04 Mar 2011 19:25:21 +0000
On 4 Mar 2011, at 19:09, Quincey Morris wrote:
> On Mar 4, 2011, at 03:40, Jonathan Taylor wrote:
>
>> I have a window with a large number of editable text fields, and a big "Go" button. The text fields are bound to values in my class. At the moment if there is an edit of one of the values in progress and then I press "Go" then the "old" value for that field is the one in my class variable that is acted upon.
>>
>> In my view it would make a lot more sense to accept the current field text, probably while retaining the current selection in the edit session, and then act on the "Go" command. Is there a compact way of doing this? I have seen some rather convoluted code samples that accept the current edit session, but retaining the current selection looks to be very complicated, and require assumptions about the nature of the control involved. Surely there should be a more general one-line way of achieving this? Or is there a good UI argument why what I want is a bad idea?
>
> I really don't really understand the part about "the current edit session", but in general the solution is fairly straightforward -- you make use of NSController and its implementation of the NSEditor protocol.
>
> Instead of binding your text fields directly to your data model, bind them instead to a NSObjectController object in your NIB file, which is in turn bound to the data model. Then, in the action method of your Go button, first send one of the 2 'commitEditing...' methods to the NSObjectController. (One is synchronous and is used for reporting errors application-modally. The other is asynchronous and is used for reporting errors in a sheet on the offending window.) You'll also have to write code to deal with any text fields that refuse to accept their values, if that applies.
>
> Once the commit is done, proceed with your action normally. This will use the committed text field values.
Thanks. I'll have a try with that.
> Nothing in any of this will or should have any effect on what's selected in the text field where editing was in progress. Why is retaining the current selection so complicated?
I don't know! The sample I saw (can't remember where now) did something which caused the text to be committed, but that had the side-effect of causing the text field to lose focus if I remember rightly. They then did some complicated application-specific stuff to restore the focus and selection to what it was. Evidently whoever wrote the sample did not know what they were doing!
Thanks again for your help
Jonny
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden