NSOutlineView view-based, editieren

  • NSOutlineView view-based, editieren

    Hi,

    ich habe einen NSOutlineView (siehe Anhang), der mir ein paar items anzeigt.

    Ich möchte erreichen, dass ich einfach den Namen eines Items ändern, das Problem ist jetzt nur, wie ich das implementiere:

    Quellcode

    1. #pragma mark -
    2. #pragma mark NSTextFieldDelegate
    3. - (BOOL)control:(NSControl *)control
    4. textShouldEndEditing:(NSText *)fieldEditor {
    5. NSLog(@" %@", fieldEditor.string);
    6. return YES;
    7. }
    8. #pragma mark -
    9. #pragma mark NSOutlineViewDelegate Pr
    10. - (NSView *)outlineView:(NSOutlineView *)outlineView
    11. viewForTableColumn:(NSTableColumn *)tableColumn
    12. item:(id)item {
    13. NSTableCellView *result = [outlineView makeViewWithIdentifier:[tableColumn identifier] owner:self];
    14. [result.textField setStringValue:[item name]];
    15. result.imageView.image = [NSImage imageNamed:NSImageNameFolder];
    16. result.textField.delegate = self;
    17. return result;
    18. }
    19. #pragma mark -
    20. #pragma mark NSOutlineViewDataSource Pr
    21. #pragma mark Display Data
    22. - (NSInteger)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item {
    23. if (item) {
    24. if ([item isKindOfClass:[HGJob class]]) {
    25. return 0;
    26. } else {
    27. return [item childNodes].count;
    28. }
    29. }
    30. return self.mainController.objectGraph.count;
    31. }
    Alles anzeigen


    Mit folgendem Code erhalte ich die Änderung, allerdings wird es sehr aufwendig, das entsprechende item zu finden und den Namen neu zu setzen.


    Wie macht man dies bei view-based NSOutlineViews? outlineView:setObjectValue:forTableColumn:byItem: funktioniert bei view-based nicht.


    Viele Grüße
  • Ist zwar i.wie von hinten durchs Auge geschossen, aber so kann es gehen.
    Ich habe noch herausgefunden dass NSTableCellView die property objectValue Besitz. Darin kann man das Modell speichern und über [-NSView superview] kommt man wieder an die NSTableCellView und damit an sein Modell in der delegate-method von NSTextField. Ich denke so ist es performanter, trotzdem danke.

    Viele Grüße
  • Nein, der Ansicht bin ich nicht. Lies mal die Apple Docs dazu durch. Bei -rowForView: steht:

    Discussion

    Quellcode

    1. This is typically needed in the action method for an NSButton (or NSControl) to find out what row (and column) the action should be performed on.


    Ach ja, ich glaube mich daran zu erinnern, auf diese Methode in einem Apple Demo-Video im Developer Portal gestoßen zu sein, als ich angefangen habe, mich über view-based NSTableViews zu informieren. Ich habe die Methode nicht erst nachdem ich deinen Fall gelesen habe, herausgesucht.