Hello,

in my app, I can edit a selection of model objects in a window which that consists of NSTextFields and NSComboBoxes to edit model properties, all via binding to an NSArrayController's selection proxy.

When I'm editing a multi-selection that has property values are different for individual model objects in the selection, I get an undesired behavior from NSComboBox:

When I tab over an NSComboBox which displays the multiple-values placeholder, upon exiting the combo box, the corresponding property for all selected objects is nil'd. (BAD)

When I do the same (tabbing over) with an NSTextField, the values of the individual objects' properties are unchanged. (GOOD).

Since I have no control over how NSComboBox implements its bindings and I therefore can't fix the handling of multi-valued selections, I fixed this by subclassing NSComboBox and implementing -objectValue by returning the NSMultipleValuesMarker object as I see fit.

- (id)objectValue
{
    id result = [super objectValue];
    if (returnMultiValuesMarkerForEmptyObjectValue) {
        if ([result isEqualTo:@""])  {
            result = NSMultipleValuesMarker;
        }
    }
    return result;
}

The private returnMultiValuesMarkerForEmptyObjectValue ivar is set to YES externally by my editor controller which knows that a multiple selection is being edited.

This works reasonably well but I wonder how others have fixed this problem. I feel returning NSMultipleValuesMarker is a hack which works only because NSComboBox thinks it's a legitimate return value (or doesn't care). The fact that I can't clear properties for multiple selections is a side effect I can live with.

Any better fixes for this?

Regards
Markus
--
__________________________________________
Markus Spoettl
_______________________________________________

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:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to