On Jul 20, 2012, at 19:03 , Keary Suska wrote:
> In an NSTableView I am providing custom cells via
> tableView:dataCellForTableColumn:row:, based on values represented in other
> columns. The cell is usually determined when a value is specified via
> NSPopupButtonCells in two other columns. When an effecting value is changed,
> I call reloadDataForRowIndexes:columnIndexes: to refresh the cell(s) in
> question. The problem is that even thought the delegate method is properly
> called to return the changed NSCell, the NSTableView will not redraw the cell
> until the row is deselected or is refreshed by some other means--such as
> obscuring the tableview with another window or clicking in the cell (but only
> when it's data cell is editable). I have also tried calling
> setNeedsDisplayInRect:, but that doesn't work either.
>
> Oddly, it seems to work fine when called from an action method assigned to
> the NSMenuItems level of a particular NSPopupButtonCell, but not when called
> from an action method assigned to the NSPopupButtonCell itself. Although I
> did try to specify the action for the individual NSMenuItems in the other
> popup, but that didn't work either. The main difference between the two is
> that one is specified via Interface Builder and the other is generated in
> code.
> - (IBAction)selectComparator:(id)sender
> {
> // clear operand
> [[self clauseExpressionForRow:[queryTableView selectedRow]]
> setOperand:[ClauseOperand nullOperand]];
>
> // comparator changes may change operand displays
> [queryTableView reloadDataForRowIndexes:[NSIndexSet
> indexSetWithIndex:[queryTableView selectedRow]] columnIndexes:[NSIndexSet
> indexSetWithIndex:4]];
> }
So, to clarify, when it fails, are you saying:
1. It doesn't get to 'selectComparator:'.
2. It gets there, but 'dataCellForTableColumn:' doesn't get called for column 4
(at least, not until later, at the point where the row really redraws).
3. It gets to 'dataCellForTableColumn:' for the right row/column combinations
at the expected time, but the display just doesn't redraw.
?
What happens if you simply 'reloadData' instead of trying to be specific,
and/or what happens if you simply 'setNeedsDisplay:' instead of trying to be
specific?
Also, I notice that if '[queryTableView selectedRow]' isn't what you are
expecting, when 'selectComparator:' is called, you'd get precisely the behavior
you describe.
_______________________________________________
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]