> Message: 1 > Date: Sun, 20 Apr 2008 14:02:52 -0600 > From: Keary Suska <[EMAIL PROTECTED]> > Subject: Re: Binding NSButton enabled state > To: "Cocoa-Dev (Apple)" <cocoa-dev@lists.apple.com> > Message-ID: <[EMAIL PROTECTED]<[EMAIL PROTECTED]> > > > Content-Type: text/plain; charset="US-ASCII" > > on 4/20/08 11:47 AM, [EMAIL PROTECTED] purportedly said: > > > On Sat, Apr 19, 2008 at 11:55 PM, Chris Hanson <[EMAIL PROTECTED]> wrote: > > > >> On Apr 19, 2008, at 11:08 AM, Lorenzo Thurman wrote: > >> > >> I have two NSTableViews, tableA and tableB, each managed by separate > >>> NSArrayControllers. When a selection is made in either table, an > >>> instance > >>> variable is set. I want to have an NSButton's enabled state to 'YES' > >>> whenever the instance variable is set. > >>> > >> > >> Don't think of it as an instance variable, think of it as a property. > >> Restating your problem, you want your "Do Something" button's enabled > >> property to be bound to your window controller's "can do something" > >> property. > >> > >> What this means is that you need to manipulate your window controller's > >> "can do something" property in a way that things bound to it can notice > -- > >> in other words, in a way that will post key-value observing > notifications. > >> Thus instead of manipulating it as an instance variable, you should > just > >> always invoke its setter. > >> > >> You haven't said how you're actually noticing that the selection in one > of > >> your tables has changed; I assume you're either using an NSTableView > >> delegate method or a notification to do so. > >> > >> -- Chris > >> > >> > > Here's my code:I register to receive these notifications when the > selection > > changes. > > > > -(void)applicationDidFinishLaunching:(NSNotification*)not{ > > > > > > [[NSNotificationCenter defaultCenter] addObserver:self > selector:@selector( > > usTableViewSelectionDidChange:) name: > > NSTableViewSelectionDidChangeNotification object:usCityTable]; > > > > [[NSNotificationCenter defaultCenter] addObserver:self > selector:@selector( > > intlableViewSelectionDidChange:) name: > > NSTableViewSelectionDidChangeNotification object:intlTable]; > > > > } > > > > > > These are the messages sent when a selection is changed (Is there a way > to > > use just one?): > > Yes, if instead you make your controlling object the delegate to both > tableviews and implement -tableViewSelectionDidChange:. > > > -(void) usTableViewSelectionDidChange:(NSNotification*)not{ > > > > NSArray* selObjs = [usTableContent selectedObjects]; > > > > if([selObjs count] > 0) { > > > > [intlTable deselectAll:self]; > > > > NSDictionary* selectedDictionary = [selObjs objectAtIndex:0]; > > > > [self setValue:[selectedDictionary objectForKey:@"location"] forKey: > > @"location"]; > > > > [self setSelectedItem:selectedDictionary]; > > > > } > > > > } > > > > -(void) intlableViewSelectionDidChange:(NSNotification*)not{ > > > > NSArray* selObjs = [intlTableContent selectedObjects]; > > > > if([selObjs count] > 0){ > > > > [cityTable deselectAll:self]; > > > > NSDictionary* selectedDictionary = [selObjs objectAtIndex:0]; > > > > [self setValue:[selectedDictionary objectForKey:@"location"] forKey: > > @"location"]; > > > > [self setSelectedItem:selectedDictionary]; > > > > } > > > > > > } > > Note that when you call -deselectAll:, that triggers an > NSTableViewSelectionDidChangeNotification, so you may want to watch out. > Your checks probably avoid loops, but the notifications will get sent more > often than is necessary. > > Anyway, what kind of object is "location"? Are you applying any > transformers? If not, how are you considering how your object will get > coerced into a boolean? > > HTH, > > Keary Suska > Esoteritech, Inc. > "Demystifying technology for your home or business" > > > > > I'll look at the tableview deleegates again. I looked at those before, but reasoned that they might not work as I would like, but I can't remember why. Thanks for pointing out the potential for looping and the extra notifications that get sent, but the problem I ran into without the deselectAll, was that if I made a selection in tableA, my interface updated correctly, then made a selection in tableB, my interface updated correctly, but then made the same selection again in tableA, my interface did not update correctly, since there was not change in selection _______________________________________________
Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) 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: http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to [EMAIL PROTECTED]