2

NSTableView 内にチェックボックスの列を設定するにはどうすればよいですか? これまでのところ、これは私が行ったことですが、チェックボックスではなく int 1 を列に入れるだけです:

-(id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row {
    if ([[tableColumn identifier] isEqualToString:@"Enable"]) {
        NSButtonCell *cell=[[[NSButtonCell alloc] init] autorelease];
        [cell setAllowsMixedState:YES];
        [cell setButtonType:NSSwitchButton];
        NSCell *aCell = [tableColumn dataCellForRow:row];
        [aCell setObjectValue:cell];
        return [NSNumber numberWithInt:1];
    }

    return [[data objectAtIndex:row+1] objectAtIndex:[[data objectAtIndex:0] indexOfObject:[tableColumn identifier]]];
}
4

2 に答える 2

6

Interface Builder で、チェック ボックス セルをテーブル列にドラッグします。これにより、列のデータ セルが設定されます。インスペクターで必要に応じてセルを設定します。次に、セルに作用するここにあるすべてのコードを削除し、NSNumber.

これをプログラムで実行したいというあなたの希望に応えて: Interface Builder は本当にここに行く方法です。GUI オブジェクトをレイアウトするために設計されています。でもやり方を教えます。

まず、引数として別のを呼び出しsetObjectValue:ても、最初の値が 2 番目の値に変換されたり、ポインターの値などが変更されたりすることはありません。このメソッドは、セルの を変更します。つまり、セルがテキストとして表示するオブジェクトです。NSCellNSCellsetObjectValue:objectValue

プログラムでテーブル列にセルを提供したい場合は-[NSTableColumn setDataCell:]、目的のNSCell場所で呼び出す必要があります (awakeFromNibおそらく良い選択です)。ただし、テーブル列はすべての行に同じセル インスタンスを再利用し、正しく表示されるように、描画される前に修正します。UPDATE: NSTableColumn をサブクラス化せずに、列の各行に異なるセルを設定する方法はありません。

于 2011-04-01T05:51:57.313 に答える