Kann jemand hier Zellen in NSOutlineView editierbar machen? Ich benutze den Sampe-Code von Apple und ich kann es nicht funktionieren.NSOutlineView-Zeilen können bearbeitet werden
Ich versuche, es einzurichten, so dass, wenn Sie zweimal schnell nacheinander auf eine Zelle in der NSOutlineView klicken, die Zelle bearbeitet werden kann, damit der Benutzer den Text in der Zelle aktualisieren kann. (In der gleichen Weise, wie es in xcode und Mail und so weiter funktioniert).
Ich schließe den Großteil des restlichen Codes dieses Controllers in die vergebliche Hoffnung ein, dass jemand sehen kann, was ich falsch mache, das ist sehr frustrierend. Ich weiß shouldEditTableColumn
wird aufgerufen, wie es die NSLog-Nachricht bei Doppelklick zurückgibt.
@implementation DisplayHierarchyController
- (void)awakeFromNib {
// cache the reused icon images
folderImage = [[[NSWorkspace sharedWorkspace] iconForFileType:NSFileTypeForHFSTypeCode(kGenericFolderIcon)] retain];
[folderImage setSize:NSMakeSize(16,16)];
objectImage = [[[NSWorkspace sharedWorkspace] iconForFileType:NSFileTypeForHFSTypeCode(kGenericPreferencesIcon)] retain];
[objectImage setSize:NSMakeSize(16,16)];
diagramImage = [[[NSWorkspace sharedWorkspace] iconForFileType:NSFileTypeForHFSTypeCode(kGenericEditionFileIcon)] retain];
[diagramImage setSize:NSMakeSize(16,16)];
//
// Tell the outline view to use a special type of cell
//NSTableColumn *tableColumn = [[outline tableColumns] objectAtIndex: 0];
//ImageTextCell *imageTextCell = [[[ImageTextCell alloc] init] autorelease];
//[imageTextCell setEditable:YES];
//[tableColumn setDataCell:imageTextCell];
//
[[[outline tableColumns] objectAtIndex: 0] setEditable: YES];
}
- (BOOL)outlineView:(NSOutlineView *)outlineView shouldEditTableColumn:(NSTableColumn *)tableColumn item:(id)item {
NSLog(@"edit %@", tableColumn);
return YES;
}
- (NSCell *)outlineView:(NSOutlineView *)outlineView dataCellForTableColumn:(NSTableColumn *)tableColumn item:(id)item {
ImageTextCell *imageTextCell = [[[ImageTextCell alloc] init] autorelease];
[imageTextCell setEditable:YES];
return imageTextCell;
}
// Returns the object that will be displayed in the tree
- (id)outlineView: (NSOutlineView *)outlineView child: (int)index ofItem: (id)item {
if(item == nil)
return [[document children] objectAtIndex: index];
if([item isKindOfClass: [Item class]])
return [[item children] objectAtIndex: index];
return document;
}
- (BOOL)outlineView: (NSOutlineView *)outlineView isItemExpandable: (id)item {
if([item isKindOfClass: [Item class]])
return [[item children] count]>0;
return NO;
}
- (int)outlineView: (NSOutlineView *)outlineView numberOfChildrenOfItem: (id)item {
if(item == nil)
return document.children.count;
if([item isKindOfClass: [Item class]])
return [[item children] count];
return 0;
}
- (id)outlineView: (NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item {
if([item isKindOfClass: [Item class]])
return [item name];
return @"n/a";
}
- (void)outlineView:(NSOutlineView *)outlineView setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn byItem:(id)item {
NSLog(@"setObjectValue called");
}
- (void)outlineView:(NSOutlineView *)olv willDisplayCell:(NSCell*)cell forTableColumn:(NSTableColumn *)tableColumn item:(id)item {
[cell setEditable: YES];
[cell setAllowsEditingTextAttributes: YES];
[(ImageTextCell*)cell setImage: objectImage];
}
- (BOOL)control:(NSControl *)control textShouldBeginEditing:(NSText *)fieldEditor {
return YES;
}
- (BOOL)control:(NSControl *)control textShouldEndEditing:(NSText *)fieldEditor {
if ([[fieldEditor string] length] == 0) {
// don't allow empty node names
return NO;
} else {
return YES;
}
}
@end
"Ich kann es anscheinend überhaupt nicht schaffen." Was meinst du damit? Bitte bearbeiten Sie Ihre Frage genauer. –
Hoffentlich macht es das klarer. Ich möchte auf eine Zeile doppelklicken, um die Bearbeitung dieser Zeile zu aktivieren. – Jacob
Ich mache mehr Studie darüber, wie man dies zum Funktionieren bringt, die Apple-Dokumentation sagt: "Eine Gliederungsansicht erbt viel von ihrem Verhalten von ihrer Elternklasse, NSTableView .... ..oder weitere Informationen finden Sie in der Programmieranleitung zur Tabellenansicht. " Ein NSTableView hat diese Methode "(BOOL) tableView: (NSTableView *) aTableView shouldEditTableColumn: (NSTableColumn *) aTableColumn Zeile: (NSInteger) rowIndex" aber ich kann nicht in der Lage sein, es zu meinem Controller in einer Weise hinzuzufügen, die es bekommt namens. – Jacob