2

表示されるデータに基づいて、NSTableViewの一部の列を動的に非表示/表示したいのですが、基本的に、列が空の場合は、列を非表示にします。現在、テーブルのデリゲートとしてコントローラークラスをテーブルに入力しています。

何か案は?Interface Builderで列を非表示に設定できるように見えますが、列を調べて空かどうかを確認するのに良い時期ではないようです。テーブル内のすべてのデータが入力される前/後に呼び出されます。

4

9 に答える 9

13

Mac OS X v10.5 以降では、NSTableColumnのsetHidden:セレクターがあります。

これにより、識別子を使用して列を動的に非表示/表示できます。

NSInteger colIdx;
NSTableColumn* col;

colIdx = [myTable columnWithIdentifier:@"columnIdent"];
col = [myTable.tableColumns objectAtIndex:colIdx];
[col setHidden:YES];
于 2012-02-28T21:45:27.273 に答える
3

私はこれをバインディングで行いましたが、Interface Builder ではなくプログラムでセットアップしました。

この疑似スニペットは、その要点を示しているはずです。

NSTableColumn *aColumn = [[NSTableColumn alloc] initWithIdentifier:attr];
[aColumn setWidth:DEFAULTCOLWIDTH];
[aColumn setMinWidth:MINCOLWIDTH];
[[aColumn headerCell] setStringValue:columnLabel];

[aColumn bind:@"value"
     toObject:arrayController 
  withKeyPath:keyPath 
  options:nil];             

[tableView addTableColumn:aColumn];
[aColumn release];

もちろん、フォーマッターなども追加できます。

于 2008-09-16T12:12:54.847 に答える
1

現時点では完全な答えはありませんが、バインディングを調べてください。一般に、CocoaBindingsを使用してあらゆる種類のことを行うことができます。

NSTableColumnの可視性バインディングはありませんが、幅を0に設定できる場合があります。

次に、それをNullプレースホルダーにバインドし、この値を0に設定できますが、他のプレースホルダーを適切な値に設定することを忘れないでください。

(私が言ったように、これはほんの始まりであり、微調整が必​​要な場合があります)。

于 2008-09-16T04:09:36.753 に答える
0

すべてのデータが入力されることは一度もありません。NSTableViewはデータを保存せず、データソース(またはバインディングを使用している場合はバインドされたオブジェクト)から動的にデータを要求します。データソースから取得したデータを使用して描画し、破棄します。たとえば、テーブルが表示されていないもののデータを要求するのを見る必要はありません。

データソースを使用しているようですね。データが変更された場合、テーブルで-reloadDataを呼び出すのはユーザーの責任ですが、これは少し誤称です。それは「すべてを無効にする」のようなものです。

つまり、データがいつ変更されるかをすでに知っている必要があります。これが、非表示にする列を計算できるポイントです。

于 2008-09-16T12:01:25.233 に答える
0

NSTable は、テーブルを描画するクラスです。あなたが言ったように、テーブルをデリゲートとして指定するクラスがあり、このクラスは表示するデータをテーブルにフィードします。テーブル データをデリゲート クラス内の NSArray として格納すると、1 つの列が空かどうかを簡単に確認できるはずですよね。そして NSArray はデリゲート メソッドを介してクラスにいくつの列があるかを尋ねます。そのため、尋ねられたときに、データを持っている列の数を探して、内部に保存する列の実際の数ではなくその数を報告してから、要求されたときに報告してください。 (列、行) のデータを提供し、空の列をスキップするだけです。

于 2008-09-30T10:48:50.090 に答える
0

@amrox - あなたの提案を正しく理解していれば、テーブルの NSTableColumns の非表示プロパティに値をバインドする必要があると言っていますか? それはうまくいくようですが、 isHidden および setHidden メッセージが列の可視性を制御するため、NSTableColumn に隠しプロパティがあるとは思いません。 (これはかなり可能です)。

于 2008-09-17T23:41:34.573 に答える