Thank you for the quick reply.

Implementing 'tableView:willDisplayCell:forTableColumn:row:' is exactly what I needed. Just want to change cell attributes. I thought the only way to do this was to subclass 'dataCellForRow:', especially since it was 'pointed out' in the documentation. But, this led to too much work (IB and all), for a one line attribute change (and never came out right).

Guess I need to review all the delegate protocols. Since I'll be spending plenty of time in tableViews, I need to know every aspect of configuration.

Thank you, again.

On Mar 22, 2011, at 12:22 AM, Quincey Morris wrote:

On Mar 21, 2011, at 16:16, William Weygandt wrote:

I need to set attributes for a TableColumn cell, based on its row, leaving the cells of other rows, unchanged. I tried using the method dataCellForRow:. I just can't seem to make this work. Not sure I can subclass this because the delegate will reference this method.

Can you ask a more specific question. We've no idea what you've tried and what's failed. We don't know what you mean by "can't seem to make this work". You might want to post some failing code, if you're not sure how to describe the problem. Meantime ...

You shouldn't think in terms of subclassing NSTableColumn -- it just makes it too hard to set things up in IB.

Instead you should use one or both of the delegate methods 'tableView:dataCellForTableColumn:row:' and 'tableView:willDisplayCell:forTableColumn:row:' (or the parallel variants used by outline views). All you have to do is the keep them straight in your mind.

'tableView:dataCellForTableColumn:row:' is called to obtain a cell to use at a specific row/column position, in case you want to use a different kind of cell (or for some reason just a different cell) from the default provided by the column. At the time this is called, the cell is not being configured yet, just being obtained, so anything you do to it is subject to being undone by NSTableView.

'tableView:willDisplayCell:forTableColumn:row:' is called sometime after that to configure a cell for use, whether the cell was provided by your 'tableView:dataCellForTableColumn:row:' or not. (The "not" case happens when you don't implement that delegate method, or it returns nil.) When this second method is called, the cell has already been configured as far as the table view knows how (e.g. it's set the correct object value), so you can make any further adjustments you need.

So, if your table column has a text field cell, you would use the first delegate method (for example) to change to an image cell in certain rows. Or, if a text field cell has been chosen for the row/ column, you would use the second delegate method (for example) to change the color of the text. Or, if you needed to change to an image cell for some rows *and* configure the image being displayed, you'd do that in two steps, using one delegate method for each.

Does that help at all?



_______________________________________________

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 arch...@mail-archive.com

Reply via email to