我只需要在带有复选标记的部分中选择一行即可。我使用NSFetchresultscontroller从核心数据存储中检索数据。在这里,我有一个具有选定标志的实体。目前,我的didSelectRowAtIndexpath方法中包含以下代码。
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:NO];
if (![indexPath section] == 0) {
NSIndexPath *frcIndexPath = [NSIndexPath indexPathForRow:indexPath.row inSection:(indexPath.section - 1)];
SubMenus *subMenus = [self.fetchedResultsController objectAtIndexPath:frcIndexPath];
// Toggle 'selected' state
BOOL isSelected = ![self subMenuIsSelected:subMenus]; //![self cellIsSelected:indexPath];
if ([subMenus.group.maxSelectCount isEqualToNumber:@(1)]) {
DLog(@"Only Select One row in this group/section");
}else {
if (isSelected) {
[tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryCheckmark;
}else {
[tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryNone;
}
}
NSNumber *selectedIndex = [NSNumber numberWithBool:isSelected];
subMenus.selected = selectedIndex;
[subMenus save];
[[CoreDataManager sharedInstance] saveMasterContext];
}
}
如果节中的maxSelectCount为1,则用户只能选择一行。我该怎么做?
附言Selected属性是一个BOOL值。
最佳答案
好的,一种快速解决方案是在didselect方法中获取所选行的索引并将其设置为全局变量,然后在此表视图上调用reloaddata。在cellForRowAtIndexpath方法中,检查当前索引是否与您在didselextrow中设置的全局索引相同,并相应地设置复选标记。
关于ios - 根据核心数据对象,仅选择带有复选标记的一行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22075476/