Hi all. I've got an NSTableView that I'd like to be editable. Even if I return YES from -tableView:shouldSelectRow: and YES from tableView:shouldEditTableColumn:row:, however, editing does not actually commence. The row selects, and I've confirmed with logs that both delegate methods are indeed getting called; the tableView seems to just decide not to start editing after all. No other console logs appear, so it's not a raise. Simply not implementing the two delegate methods mentioned above does not make any difference. The object value for cell that should enter editing is an NSString, and its cell is an NSTextFieldCell. Is there some additional step I have to take to make editing actually commence?

The tableview is set up in code. What appear to be custom subclasses in this code are all #defined back to their superclasses, and all of the code for these classes if #if 0'ed out, so this code is really using only the Cocoa classes:

#define AKVariableStoreTableView NSTableView
#define AKTextFieldCell NSTextFieldCell
#define AKSwatchCell NSTextFieldCell
#define AKDividerCell NSTextFieldCell

+ (NSTableColumn *)columnObjectForIdentifier:(NSString *)identifier
{
NSTableColumn *column = [[NSTableColumn alloc] initWithIdentifier:identifier];
        
        if (identifier == nameColumnID)
        {
                AKTextFieldCell *cell = [[AKTextFieldCell alloc] 
initTextCell:@""];
                
                [column setMinWidth:AKNameColumnWidth];
                [column setMaxWidth:AKNameColumnWidth];
                
[cell setFont:[NSFont antikytheraFontOfSize:AK_VARIABLE_STORE_VARIABLE_FONT_SIZE]];
                
                [column setDataCell:cell];
        }
        else if (identifier == equalsColumnID)
        {
                AKTextFieldCell *cell = [[AKTextFieldCell alloc] 
initTextCell:@""];
                
                [column setMinWidth:AKEqualsColumnWidth];
                [column setMaxWidth:AKEqualsColumnWidth];
                
                [cell setAlignment:NSCenterTextAlignment];
[cell setFont:[NSFont antikytheraFontOfSize:AK_VARIABLE_STORE_VALUE_FONT_SIZE]];
                
                [column setDataCell:cell];
        }
        else if (identifier == valueColumnID)
        {
                AKTextFieldCell *cell = [[AKTextFieldCell alloc] 
initTextCell:@""];
                
                [column setMinWidth:AKValueColumnWidth];
                [column setMaxWidth:AKValueColumnWidth];
                
                [cell setAlignment:NSRightTextAlignment];
[cell setFont:[NSFont antikytheraFontOfSize:AK_VARIABLE_STORE_VALUE_FONT_SIZE]];
                
                [column setDataCell:cell];
        }
        else if (identifier == swatchColumnID)
        {
                AKSwatchCell *cell = [[AKSwatchCell alloc] initImageCell:nil];
                
                [column setMinWidth:AKSwatchColumnWidth];
                [column setMaxWidth:AKSwatchColumnWidth];
                
                [column setDataCell:cell];
        }
        else if (identifier == descriptionColumnID)
        {
                AKTextFieldCell *cell = [[AKTextFieldCell alloc] 
initTextCell:@""];
                
                [column setMinWidth:AKDescriptionColumnWidth];
                [column setMaxWidth:1000];
                
                [cell setTextColor:[NSColor grayColor]];
                [cell setAlignment:NSRightTextAlignment];
[cell setFont:[NSFont antikytheraFontOfSize:AK_VARIABLE_STORE_DESCRIPTION_FONT_SIZE]];
                
                [column setDataCell:cell];
        }
        
        return column;
}

#define AK_VARIABLE_STORE_INSET 15

- (NSTableView *)makeTableViewWithWidth:(int)width
{
        if (!tableView)
        {
NSRect tableViewFrame = NSMakeRect(AK_VARIABLE_STORE_INSET, AK_VARIABLE_STORE_INSET, width, 100);
                
tableView = [[AKVariableStoreTableView alloc] initWithFrame:tableViewFrame];
                
                // Set up behavior
                [tableView setAllowsColumnReordering:NO];
                [tableView setAllowsColumnResizing:NO];
                [tableView setAllowsColumnSelection:NO];
                [tableView setAllowsEmptySelection:YES];
                [tableView setAllowsMultipleSelection:NO];
                [tableView setAllowsTypeSelect:NO];
                [tableView setAllowsColumnReordering:NO];
                [tableView setAutosaveTableColumns:NO];
[tableView setColumnAutoresizingStyle:NSTableViewLastColumnOnlyAutoresizingStyle];
                [tableView setAutosaveTableColumns:NO];
                
                // Set up appearance
                [tableView setBackgroundColor:[NSColor windowBackgroundColor]];
                [tableView setGridStyleMask:NSTableViewGridNone];
                [tableView setIntercellSpacing:NSMakeSize(0.0, 1.0)];
                [tableView setRowHeight:18];
                
                // Add parts
[tableView addTableColumn:[AKVariableStore columnObjectForIdentifier:nameColumnID]]; [tableView addTableColumn:[AKVariableStore columnObjectForIdentifier:equalsColumnID]]; [tableView addTableColumn:[AKVariableStore columnObjectForIdentifier:valueColumnID]]; [tableView addTableColumn:[AKVariableStore columnObjectForIdentifier:swatchColumnID]]; [tableView addTableColumn:[AKVariableStore columnObjectForIdentifier:descriptionColumnID]];
                
                // Set ourselves up to be in charge
                [tableView setDelegate:self];
                [tableView setDataSource:self];
                
                [tableView setFrame:tableViewFrame];
                [tableView sizeLastColumnToFit];
        }
        
        return tableView;
}

My delegate methods (skipping the implementations for the unimportant ones):

- (BOOL)tableView:(NSTableView *)aTableView shouldSelectRow: (NSInteger)rowIndex
{
        return YES;
}

- (BOOL)tableView:(NSTableView *)aTableView shouldEditTableColumn: (NSTableColumn *)aTableColumn row:(NSInteger)rowIndex
{
        return YES;
}

- (CGFloat)tableView:(NSTableView *)tableView heightOfRow: (NSInteger)rowIndex - (NSCell *)tableView:(NSTableView *)tableView dataCellForTableColumn: (NSTableColumn *)aTableColumn row:(NSInteger)rowIndex

  My datasource methods:

- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView
- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn: (NSTableColumn *)aTableColumn row:(NSInteger)rowIndex - (void)tableView:(NSTableView *)aTableView setObjectValue: (id)anObject forTableColumn:(NSTableColumn *)aTableColumn row: (NSInteger)rowIndex

  That last datasource method never gets called, if you're wondering.

The only unusual thing about this tableview is that I set it up in code instead of in IB, so I assume the root of the problem is in my programmatic setup code. But where? I've been hunting for a - setEditable:YES method somewhere that I need to call, but I haven't found it...

  Any ideas?  Thanks!

Ben Haller
Stick Software

_______________________________________________

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

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

Reply via email to