0

我在NSCellNSTableView. 下面是主窗口: 在此处输入图像描述

该窗口有一个表格视图,其中显示了一个图标、一个标题、一个进度指示器和一条消息。由于我的计算机是 10.6,我使用基于单元格的表格视图来实现它。自定义单元格基于 Apple 提供的 ImageAndTextCell。消息绘制如下:

- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
NSMutableDictionary *fontAttributes = [NSMutableDictionary dictionaryWithCapacity:1];
    [fontAttributes setObject:[NSFont fontWithName:@"Hei" size:12] forKey:NSFontAttributeName];
    if (!self.msg) {
        self.msg = @"default";
    }
    CGRect textFrame = cellFrame;
    textFrame.origin.x += 20;
    textFrame.origin.y += 20;
    [self.msg drawAtPoint:textFrame.origin withAttributes:fontAttributes];
}

msg是单元格的副本 NSString 属性。我遇到了两个问题:

1 当我选择一个单元格时,消息将被关闭,就像: 在此处输入图像描述

只有你取消选择它,它会再次显示。我该怎么做才能解决它?

2 我需要自定义标题。如您所见,每个单元格都有一个标题,sae 或 IBM。它是委托返回的值:

- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex;

我可以更改它的位置、颜色或字体吗?

4

1 回答 1

0

像这样尝试并设置字体,您可以使用 setfont api for nscell:-

-(void)awakeFromNib
{
    cellArray=[[NSMutableArray alloc]init];
    NSCell *cell=[[NSCell alloc]initTextCell:@"firstCellValue"];
     NSCell *cell2=[[NSCell alloc]initTextCell:@"secondCellValue"];
    mutableDictionary=[NSMutableDictionary dictionary];
    [mutableDictionary setObject:cell forKey:@"FirstColumn"];
    [mutableDictionary setObject:cell2 forKey:@"secondColumn"];
    [cellArray addObject:mutableDictionary];
}

- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView
{
    return [cellArray count];
}
- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex
{
    if ([[aTableColumn identifier] isEqualToString:@"FirstColumn"])
    {
        NSCell *cell1=[mutableDictionary objectForKey:@"FirstColumn"];
        [aTableColumn setDataCell:cell1];
        return  [cell1 objectValue];
    }
    else if ([[aTableColumn identifier] isEqualToString:@"secondColumn"])
    {
        NSCell *cell2=[mutableDictionary objectForKey:@"secondColumn"];
        [aTableColumn setDataCell:cell2];
        return  [cell2 objectValue];
    }
    else
    {
        return nil;
    }
}
于 2013-09-26T14:45:22.860 回答