0

NSCellのテキストをカスタマイズする際に問題がありますNSTableView。以下はメインウィンドウです。 ここに画像の説明を入力

ウィンドウには、アイコン、タイトル、進行状況インジケーター、およびメッセージを表示するテーブル ビューがあります。私のコンピューターは 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 プロパティです。私は2つの問題に遭遇しました:

1 1 つのセルを選択すると、次のようにメッセージが閉じられます。 ここに画像の説明を入力

選択を解除するだけで、再び表示されます。修正するにはどうすればよいですか?

2 タイトルをカスタマイズする必要があります。ご覧のとおり、各セルには sae または IBM というタイトルが付いています。デリゲートから返される値です。

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

位置、色、フォントを変更できますか?

4

1 に答える 1

0

このようにしてみてください。フォントを設定するには、nscell の setfont api を使用できます:-

-(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 に答える