On Jul 12, 2012, at 2:24 AM, Quincey Morris <[email protected]> wrote:
> On Jul 11, 2012, at 15:06 , TJ wrote: > >> The problem here is that I don't have any idea where and how to get and set >> the frame of the cell. As you can see during the creation of NSTableCellView >> I'm basically using an NSZeroRect because [cellView frame] is nil. I >> subclassed NSTableCellView and added a red color for the background in order >> to see if the NSZeroRect gets automatically updated to the current cell rect >> - it does work. But it just doesn't make sense to create a subview of >> NSTableCellView with a zero-frame... is there a method inside >> NSTableCellView I should subclass and position the NSTextField? Or is it >> common to get the frame inside -viewForTableColumn and adjusting the text >> field there? What's the way Apple had in mind concerning programmatically >> creating a view-based NSTableView? I couldn't find a lot of information on >> this, the demo video on developer.apple.com directly uses an NSTextField as >> the return cell-view but my view needs to be more complex than that. I am >> pretty sure I just missed something very important here. ;-) > > The cell view creation occurs earlier than the point where the cell view's > geometry (including its frame) is configured for the row where it's going to > be used. (Note that you're only creating the view if there isn't one to > reuse, and the re-used one will have the "wrong" frame from wherever it was > last used.) > > You never set the frame yourself. The table view does that. > > In a circumstance like this, you can create the view with any frame you want, > because it will be re-sized and re-positioned later. The only real > consideration is that, depending on the intended subviews, you may choose > *not* to make the view very small, because autoresizing of subviews of a view > that's too small to contain them may produce undesirable results. > > So, use an empty frame rect, or a 100 x 100 frame rect or a 1000 x 1000 frame > rect or whatever is convenient for the purpose of initially creating the view. > Or, if you really need it, you can use the value from frameOfCellAtColumn:row: -- that is the value that the table is going to set on the returned "cell view". The method is pretty fast, so it should be okay to call. However, it will be faster to just use a hardcoded value for initial layout (like 100x100, or column.width x rowHeight -- and if you want to get even more fancy, subtract half the intercellSpacing from each.) corbin >> And my second question is - is it possible to create a cell view which is >> bigger than one row, thus it's overlaying other rows (I'm not customizing my >> table view to death, I have a good reason for cell views being positioned >> over several rows). > > I dunno, but I doubt that it works. The table view re-uses cell views that > are scrolled out of the content view, and I suspect it bases this on the row > height, not the row's cell view's frame rect. In addition, I'd imagine that > overlapping rows might mess up row animations. Lastly, your view is going to > be resized by the table view itself, so your attempt to re-size is might be > frustrated anyway. > > > P.S. Here's a documentation reference: > > > https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/TableView/PopulatingView-TablesProgrammatically/PopulatingView-TablesProgrammatically.html#//apple_ref/doc/uid/10000026i-CH14-SW5 > > which has sample code similar to yours. Note the comment that says, "the > height of the frame is not really relevant, the row-height will modify the > height". > > _______________________________________________ > > Cocoa-dev mailing list ([email protected]) > > 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: > https://lists.apple.com/mailman/options/cocoa-dev/corbind%40apple.com > > This email sent to [email protected] _______________________________________________ Cocoa-dev mailing list ([email protected]) 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: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to [email protected]
