私はこのようにしましたが、うまくいきました:
1)テーブルビューのデータソース/デリゲートメソッドにセグメント化されたコントロールセルへの参照があることを確認してください。私のプロジェクトでは、セグメント化されたコントロールセルをView Controllerクラスのアウトレットプロパティに接続しました
2)セグメント化されたコントロールを持つ列のテーブルのデータソースゲッターメソッドから何かを返します(私のプロジェクトでは、repeatDaysはこの列の識別子です)なし
- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)rowIndex {
NSString *colId = [tableColumn identifier];
if ([colId isEqualToString:@"repeatDays"]) {
return nil;
}
//handle other columns
}
3) tableview のデリゲート willDisplayCell メソッドを実装する
- (void)tableView:(NSTableView *)tableView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
NSString *colId = [tableColumn identifier];
if ([colId isEqualToString:@"repeatDays"]) {
for (int i = 0; i < self.segmentedCell.segmentCount; ++i) {
BOOL selected = [[self.days objectForKey:[NSNumber numberWithInt:i]] boolValue];
[self.segmentedCell setSelected:selected forSegment:i];
}
}
}
テーブルビューが表示しようとしているときにセグメント化されたセルを構成する必要があります。たとえば、私のプロジェクトでは変更可能な辞書日があり、{0: NO のようなセグメントに対応するブール値が含まれています。 、1: はい、2: いいえ、3: はい、4: いいえ、5: いいえ、6: いいえ}、ここで、0、1、2、3、4、5、6 - セグメント、およびはい/いいえ - これがセグメントが選択されているかどうか
4) 最後に、tableview のデータソース セッター メソッドを実装します。それに渡されるオブジェクトは、クリックされたセグメントのインデックスです。モデルを適切に変更します。つまり、クリックされたセグメント インデックスのフラグを反転します。
- (void)tableView:(NSTableView *)tableView setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
NSString *colId = [tableColumn identifier];
if ([colId isEqualToString:@"repeatDays"]) {
int i = [object intValue];
BOOL selected = [[self.days objectForKey:[NSNumber numberWithInt:i]] boolValue];
[self.days setObject:[NSNumber numberWithBool:!selected] forKey:[NSNumber numberWithInt:i]];
}
}