我只需要在带有复选标记的部分中选择一行即可。我使用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/

10-10 20:42