Re: Custom NSCell and target/action
Re: Custom NSCell and target/action
- Subject: Re: Custom NSCell and target/action
- From: Corbin Dunn <email@hidden>
- Date: Fri, 19 Nov 2010 14:16:47 -0800
On Nov 19, 2010, at 7:09 AM, Vincent Habchi wrote:
> Le 19 nov. 2010 à 15:39, Graham Cox a écrit :
>
>> 1. Playing nice with the color panel requires a little care, because it's shared by not only any color wells in your app, but by any responders that implement -changeColor:
>
> You're right, I'll try to be cautious.
>
>> 2. A table column only has one cell, reused as needed to draw each row. So connecting the cell directly to the panel is a bad idea - all the colours in all rows will change at once.
>
> I've learned that the hard way: the table column makes calls to copyWithZone: to get a transitory copy and all the stuff happens from that copy. Trying to interact directly with the cell is defeated: the self pointer is invalid. It is not even possible to set the cell as the target of the color panel action!
>
>> 3. Use MVC. If a property of your data model is a colour, then your controller can set this from the color panel via -changeColor: on a first responder (tableview, most likely) and some logic you'll need to implement to establish which row is selected for colour input. Once the property is set, you refresh the table as usual and the cell will display the colour for the appropriate row.
>
> I was figuring out a way to short-circuit this round trip, but you finished to convince me that it is unwise.
>
> What method does the NSTableView use to inform the cell of its contents? -setObjectValue:?
You should just check out the example:
http://developer.apple.com/library/mac/#samplecode/AnimatedTableView/Introduction/Intro.html
It will answer a lot of questions.
corbin
_______________________________________________
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