2013-05-23 1 views
1

J'ai essayé sans succès d'éditer et de mettre à jour des éléments dans une liste NSOutlineView de liste, je n'utilise pas un treecontroller mais datasource et délégué. D'après ce que j'ai compris, la méthode outlineView: setObjectValue: forTableColumn: byItem datasource s'applique aux outlineviews basés sur les cellules et n'est pas appelée pour la vue. NSTableView a une méthode de source de données similaire tableView: setObjectValue: forTableColumn: row, mais cette fois la documentation indique qu'il s'agit d'une table basée sur des cellules et que "cible/action est utilisée pour chaque élément dans la cellule de vue."Mise à jour des éléments NSOutlineView

Donc, je ne suis pas vraiment sûr de la façon de faire cela, j'ai essayé les méthodes de délégation de champs de texte ci-dessous;

- (void)controlTextDidBeginEditing:(NSNotification *)aNotification 
{ 
    selectedRowList = [[self outlineView] selectedRow]; 
} 

- (void)controlTextDidEndEditing:(NSNotification *)aNotification 
{ 

    NSManagedObject *selectedGoal = [[self outlineView] itemAtRow:selectedRowList]; 

    NSTableCellView *viewCell = [[self outlineView] makeViewWithIdentifier:@"DataCell" owner:self]; 

    [selectedGoal setValue:[[viewCell textField] stringValue] forKey:@"goalName"]; 

    [self updateOutlineView]; 
} 

Je peux changer la valeur du champ de texte, mais je n'arrive pas à obtenir cette valeur de la vue. Je pense que le problème est que la ligne n'est plus sélectionnée une fois - (void) controlTextDidEndEditing: (NSNotification *) aNotification est exécutée.

Quelqu'un peut-il me diriger dans la bonne direction sur la meilleure façon de gérer la mise à jour des éléments NSOutlineView?

Merci

Répondre

2

J'ai eu le même problème à mon avis basé NSOutlineView, je controlTextDidChange: pour obtenir des mises à jour:

- (void)controlTextDidChange:(NSNotification *)notification { 
    NSTextField *textField = [notification object]; 
    NSTableRowView *parentRow = (NSTableRowView*)[[textField superview] superview]; 
    NSInteger row = [self.outlineView rowForView:parentRow]; 

    //.. 
}
Questions connexes