objective c - Set NSButton enabled based on NSArrayController selection -


ok, i've set nstableview bound nsarraycontroller.

now, have nsbutton want make "enabled" when there is selection, , disabled when there nothing selected.

so, i'm bind nsbutton's enabled array controller's selection value transformer of nsisnotnil.

nsisnotnil array controller , nsbutton

however, doesn't seem working.

am missing anything?

regardless of whether or not selected, selection property of nsarraycontroller returns object (_nscontrollerproxyobject). why binding isn't working way expect, because selection never nil. instead, bind selectionindexes, rather selection, , have value transformer called selectionindexescountiszero implemented so:

@interface selectionindexescountiszero : nsvaluetransformer @end  @implementation selectionindexescountiszero  + (class)transformedvalueclass { return [nsnumber class]; }  + (bool)allowsreversetransformation { return no; }  - (id)transformedvalue:(nsindexset *)value { return [nsnumber numberwithbool:[value count] > 0]; }  @end 

incidentally, can still bind selection if wish, require custom value transformer. apple state that: if value requested selection proxy [object] using key-value coding returns multiple objects, controller has no selection, or proxy not key-value coding compliant requested key, appropriate marker returned. in other words, find out if there in fact no selection, need (i) access proxy object, (ii) call 1 of methods of actual objects, , (iii) test see if return value (ii) nsnoselectionmarker. doing way key method of value transformer this:

- (id)transformedvalue:(id)selectionproxyobject {     // assume objects in table team objects, 'name' property     return [selectionproxyobject valueforkeypath:@"name"] == nsnoselectionmarker ? @yes : @no; } 

selectionindexes better way since generic. in fact, if sort of thing lot can idea build transformer library, can import project. here names of of transformers in library:

selectionindexescountiszero selectionindexescountisexactlyone selectionindexescountisoneorgreater selectionindexescountisgreaterthanone // ...you picture 

Comments

Popular posts from this blog

c++ - QTextObjectInterface with Qml TextEdit (QQuickTextEdit) -

javascript - angular ng-required radio button not toggling required off in firefox 33, OK in chrome -

xcode - Swift Playground - Files are not readable -