0

NSArrayController に関連付けられた NSTableView があります。最初の列はチェックボックスです。チェックボックスを介してアクションを実行する行をユーザーに選択させ、ユーザーが「実行」ボタンをクリックすると、その列の状態を編集不可に設定したいと考えています。

どうすればいいですか?

ありがとう!

4

1 に答える 1

0

列を無効にするのではなく、グローバルなアプリの状態に基づいて、アプリ内の個々のチェックボックス セルを無効にします。

前提条件:

1.)「実行ボタン」は、コントローラークラスにある種のグローバル状態を設定します。私にとっては、コントローラーのメンバーを次のように設定する「再生」ボタンです。

    if ([self gotoNextSong])
    _currentPlayMode = PLAYMODE_PLAY;
else
    _currentPlayMode = PLAYMODE_STOP;

2.) コントローラーは既に NSTableView のデリゲートです。そうでない場合: MyController.h で:

    @interface MyController : NSObject <NSTableViewDelegate>

MyController.m で、コントローラーをテーブルのデリゲートにします-たとえば、 init: メソッドで

    [self.myTableView setDelegate:self];

3.) チェックボックスを保持する列の識別子を知っています。そうでない場合は、column1、column2、... のような自動名にするか、Identity Inspector / Identity / Identifier で列がアクティブな間に Interface Builder で設定できます。私の場合、列名は「チェックボックス」です

解決:

1.) テーブルのデリゲート メソッドを追加して、セルがレンダリングされたときに通知します。このメソッド内で、必要に応じてチェックボックス行のセルを有効または無効にします

- (void)tableView:(NSTableView *)aTableView willDisplayCell:(id)aCell forTableColumn:  (NSTableColumn *)aTableColumn row:(int)rowIndex
{
    if(([[aTableColumn identifier] isEqualToString:@"checkboxes"]))
    {
        if (_currentPlayMode == PLAYMODE_PLAY)
            [aCell setEnabled:NO];
       else
            [aCell setEnabled:YES];
    }
}

2.) RUN ボタンがグローバル状態 (私の場合は _currentPlayMode) を設定するだけでなく、後で NSTableView を強制的に再描画することも確認してください。

[self.myTableView setNeedsDisplay:YES];
于 2013-07-27T16:09:31.013 に答える