3

プログラムで NSTableViewColumn を NSArray.arrangedObjects キーにバインドするにはどうすればよいですか? IBでそれを行う方法は知っていますが、プログラムでどのように行うかを見つけることができませんでした. コードはランタイムに新しい列を追加しており、これらの新しい列をアレイコントローラーにバインドする必要があります。IBにはまだ存在しないため、IBではできません。

ありがとう!

4

1 に答える 1

6

FWIW: ここでは View ベースNSTableViewの s を使用していると思います。

これを行うには、 のデリゲートが必要ですNSTableView。そのデリゲートでは、実装する必要があります-tableView:viewForTableColumn:row:。そこで、TableView に要求することで、Table Cell View を取得できます。それができたら、バインドしたいコントロールを取り出してバインドする必要があります。すべてが接続されたら、テーブル セル ビューを返します。以下に簡単な例を示します。

- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
    NSView* retVal = [tableView makeViewWithIdentifier:[tableColumn identifier] owner:[tableView delegate]];

    // Note: You probably don't want to be snarfing out controls this way -- a better
    // way might be to have a custom NSTableCellView subclass with the controls plugged
    // into IBOutlets on it, but that's left as an exercise for the reader.
    NSTextField* textField = [[retVal subviews] objectAtIndex: 0];

    [textField bind: NSValueBinding toObject: retVal withKeyPath: @"objectValue.name" options: nil];

    return retVal;
}
于 2013-02-03T18:19:22.850 に答える