0

注:アンドリューの応答により、私はさらに別の見方をするようになりました。この機能は、内部タイマーを備えた大規模なアプリケーションの奥深くに埋め込まれています。そのタイマーがオフの場合、ここで説明されている間違った動作が発生します。タイマーがオンになっている場合は、期待どおりに機能します。そのタイマーがこのテーブルビューと相互作用する理由はわかりませんが、私が言ったように、それは大きくて複雑なアプリです。

ユーザーが表示する列を選択できるようにしたいと思います。表示されているオブジェクトのキーごとに1つずつ、一連​​のラジオボタンまたはチェックボックスが表示されます。彼はチェックボックスをオンまたはオフにすることができ、NSTableViewはそのキーの列を追加または削除します。

表示されているオブジェクトはNSDictionaryです。辞書のキーは実行時までわからないので、実行時に識別子を使用して列を作成する必要があります...コンパイル時にはわかりません。

追加機能の実装はスムーズに進みました。列とヘッダーセルを作成し、ヘッダーセルのテキストをある値に設定します。しかし、削除はそれほど簡単ではありません。 [myTableView removeTableColumn:col]列を削除しますが、ヘッダーをうまく処理しません。ヘッダーテキストが削除されない場合があります。2列のヘッダーテキストが削除されることがあります。時々、2つのヘッダーテキスト文字列が互いに重なり合って印刷されることになります。

明らかに私は何かが欠けています。プログラムで列とそのヘッダーを削除するにはどうすればよいですか?

4

2 に答える 2

1

これは、チェック ボックス セレクターからこれら 2 つのメソッドを呼び出すことで簡単に実現できます。

列を動的に追加するには、これを呼び出す必要があります。

- (void)addColumnWithCheckboxToTable:(NSTableView *)table :(NSString *)header
{
    NSTableColumn *column = [[NSTableColumn alloc] initWithIdentifier:header];
    [[column headerCell] setStringValue:header];

    // Add column to table
    [table addTableColumn:column];
}

列を削除するには、次のように呼び出します。

- (void)removeColumnWithCheckboxFromTable:(NSTableView *)table :(NSString *)header
{
    NSTableColumn *column = [table.tableColumns objectAtIndex:[table columnWithIdentifier:header]];
    [table removeTableColumn: column];
}
于 2013-03-31T17:20:57.550 に答える