cocoa:NSCell for NSTableView中的自定义文本

时间:2013-05-20 05:38:54

标签: nstableview nscell nstextfieldcell

我在自定义NSCell NSTableView中的文字时遇到问题。以下是主窗口: enter image description here

窗口有一个表格视图,显示图标,标题,进度指示器和消息。由于我的计算机是10.6,我使用基于单元格的tableview实现它。自定义单元格基于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当我选择一个单元格时,该消息将被解除,就像: enter image description here

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

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

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

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

1 个答案:

答案 0 :(得分: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;
    }
}