2009-06-20 12 views
3

UITableViewにチェックボックスを入れる際に問題が発生しています。私はここに私のコードの一部を掲示しています。テーブルビューのCheckBox

- (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

重要な部分がいくつか欠落しています。 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]]; 
} 

また、インタフェースビルダーでテーブルセルを設定する必要があります。標準チェックボックスのように構成されたボタンセルをテーブル列の1つに直接ドラッグすることができます。

2

なぜコードでセルを作成しているのかわかりません。 Interface Builderの表の列にセルをドラッグするだけです。

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

あなたがしなければならないことは、セルには全く触れませんが、適切なプロパティの新しい値としてオブジェクトの値を設定します(この列の値は、おそらくYESまたはのいずれかを含むBoolean NSNumberになります)。あなたのモデル。

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

2

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