3

UITableViewにチェックボックスを配置する際に問題が発生しています。ここにコードの一部を投稿しています。

- (NSCell *)tableView:(NSTableView *)tableView dataCellForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
    NSButtonCell *cell=[[NSButtonCell alloc] init];
    NSString *strDisplayPlaylistName;
    strDisplayPlaylistName=[playListNameArray objectAtIndex:row];
    [cell setTitle:strDisplayPlaylistName];
    [cell setAllowsMixedState:YES];
    [cell setButtonType:NSSwitchButton];
    return cell; 
}


- (void)tableView:(NSTableView *)aTableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex {          
    NSCell *aCell = [aTableColumn dataCellForRow:rowIndex];
    [aCell setNextState];
    //NSCell *aCell=[aAddedCells objectAtIndex:rowIndex];
    //[aCell setNextState];
}

UITableView内のチェックボックスを取得しました。しかし、問題は、ボタンのチェックを外せないことです。他にやることはありますか?私はココアプログラミングに不慣れです。

4

3 に答える 3

5

いくつかの重要な部分が欠けています。tableValue:setObjectValue:forTableColumn:row: メッセージに応答してモデル (データ構造) を更新し、tableView:objectValueForTableColumn:row: メソッドから新しい値を正しく返すことができるようにする必要があります。

「booleanAttribute」プロパティを持つオブジェクトで満たされた「myRows」配列があると仮定して、いくつかのテーブル データ ソース メソッドを次に示します。

- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
    return [myRows count];
}

- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
    BOOL value = [[myRows objectAtIndex:row] booleanAttribute];
    return [NSNumber numberWithInteger:(value ? NSOnState : NSOffState)];
}

- (void)tableView:(NSTableView *)tableView setObjectValue:(id)value forTableColumn:(NSTableColumn *)column row:(NSInteger)row {          
    [[myRows objectAtIndex:row] setBooleanAttribute:[value booleanValue]];
}

また、Interface Builder でテーブル セルをセットアップする必要があります。標準のチェック ボックスのように構成されたボタン セルを、テーブルの列の 1 つに直接ドラッグできます。

于 2009-06-20T20:18:28.533 に答える
2

コードでセルを作成している理由がわかりません。セルを Interface Builder のテーブル列にドラッグするだけです。

また、setObjectValue: は、セルの状態の変化に応答する場所です。ユーザーはすでにセルの状態をオフに変更しています。次に、送信setNextStateして元に戻します。そのため、セルのチェックが外されていないように見えます。再チェックを続けます。

セルにまったく触れずに、モデルの適切なプロパティの新しい値としてオブジェクト値 (この列では、おそらくYESまたはを含むブール値の NSNumber になります) を設定する必要があります。NO

また、もちろん、列が編集可能に設定されていることを確認してください。

于 2009-06-20T23:31:25.680 に答える
2

NSTableView コンテンツ モードを「セル ベース」に設定している場合、チェックボックスを移動すると「ビュー ベース」になります。

于 2012-10-25T01:24:51.993 に答える