Thanks Kyle

-tableView:isGroupRow: gets me about 80 percent of the way there, but I'm still having a few issues.

- My "tableView:dataCellForTableColumn:row:" method is set up to return data cells correctly (I think) but the project name is editable and I don't want it to be. - The project name is still truncated to the width of the "pageNumber" column width even when it is defined as a group cell. - When arrow scrolling to the group cell (project), it doesn't highlight in blue. The gray background gets slightly darker but I would like it to be the blue embossed color of group cells

Here's how I define the project and page number cells

- (void) initTextCells
{
        pageNumberCell          = [[NSTextFieldCell alloc] init];
        [pageNumberCell setBordered: NO];
        [pageNumberCell setBezeled: NO];
        
        projectNameCell         = [[NSTextFieldCell alloc] init];
        [projectNameCell setBordered: NO];
        [projectNameCell setBezeled: NO];
        [projectNameCell setEditable: NO];
        
        dummyCell                       = [[NSTextFieldCell alloc] init];
        [dummyCell setBordered: NO];
        [dummyCell setBezeled: NO];
        [dummyCell setEditable: NO];
        
}

And here's my tableView:dataCellForTableColumn:row: delegate methods

///* may use later later
- (NSCell *) tableView:(NSTableView *) inTableView
        dataCellForTableColumn:(NSTableColumn *) inTableColumn
        row:(NSInteger) inRow
{
        if ([[inTableColumn identifier] isEqualToString: @"delete"])
        {
NSString *cellType = [[[testController arrangedObjects] objectAtIndex: inRow] objectForKey: @"cell_type"];
                
                if ([cellType isEqualToString: @"project"])
                        return addCell;
                else
                        return deleteCell;
        }
        else if ([[inTableColumn identifier] isEqualToString: @"page_number"])
        {
NSString *cellType = [[[testController arrangedObjects] objectAtIndex: inRow] objectForKey: @"cell_type"];
                
                if ([cellType isEqualToString: @"project"])
                        return projectNameCell;
                else
                        return pageNumberCell;
        }
        else if ([[inTableColumn identifier] isEqualToString: @"master"])
        {
NSString *cellType = [[[testController arrangedObjects] objectAtIndex: inRow] objectForKey: @"cell_type"];
                
                if ([cellType isEqualToString: @"project"])
                        return dummyCell;
                else
                        return masterPageCell;
        }
        else
                return [inTableColumn dataCellForRow: inRow];
}

- (BOOL) tableView:(NSTableView *) inTableView
                isGroupRow:(NSInteger) inRow
{
NSString *cellType = [[[testController arrangedObjects] objectAtIndex: inRow] objectForKey: @"cell_type"];
        
        return [cellType isEqualToString: @"project"] ? YES : NO ;
}


One thing I notice is that even though the "projectNameCell" and "dummyCell" are defined as not edtable, they are in editable the table. I suspect it's just ignoring my tests inside tableView:dataCellForTableColumn:row: and just returning a generic text cell.

How do I get the editability correct and get project name field to be wider than the page number field?


On Feb 19, 2009, at 4:34 PM, Kyle Sluder wrote:

On Thu, Feb 19, 2009 at 4:17 PM, Ken Tozier <kentoz...@comcast.net> wrote:
Seems simple enough but I can't use tables because columns are a single width and project names are much longer than page numbers. What I end up with are ridiculously long page number fields to display short numbers like 1, 2, 3, etc. I had a small bit of success, at least with respect to the way items were layed out, using custom NSCells, but this quickly gets mired in dozens of overrides and hit testing parts of the cell to make the subcells
work.

Can you afford to target Leopard-only?  If so, you can use full-width
cells for your project rows.  Return the cell in your delegate's
-tableView:dataCellForTableColumn:row: method when nil is passed for
the tableColumn argument.  You might also want to return YES for
-tableView:isGroupRow: for this row.

--Kyle Sluder

_______________________________________________

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