我是这样做的,它可以工作:
1)确保您在tableview的数据源/委托方法中引用了分段控制单元格;在我的项目中,我只是在我的视图控制器类中将分段控制单元与插座属性连接起来
2)从表的数据源 getter 方法中为具有分段控制的列返回任何内容(在我的项目中,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];
}
}
}
您需要在表格视图即将显示时配置分段单元格,根据您的模型详细信息进行配置,例如,在我的项目中我有一个可变字典days,它包含与段对应的布尔值,如{0:NO , 1: YES, 2: NO, 3:YES, 4:NO, 5:NO, 6:NO},其中 0, 1, 2, 3, 4, 5, 6 - 段,YES/NO - 是否segment selected or no
4) 最后,实现tableview的datasource setter方法;传递给它的对象是点击段索引;适当修改您的模型,即为单击的段索引翻转标志:
- (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]];
}
}