每个部分一个复选标记

时间:2014-07-10 20:38:21

标签: ios objective-c core-data model-view-controller

我尝试每个部分只显示一个复选标记。因此,当用户选择一个部分中的行时,应取消选择此行中的最后一个选定行,并选中带有复选标记的新行。我想接近这个非常动态和通用的,因为会有一些动态的部分。

到目前为止我的内容如下:

if(self.product ? subMenus.group.selectedRow  : subMenusInProductCart.group.selectedRow)
    {
        UITableViewCell *uncheckCell;

        if (self.product) {

            uncheckCell = [tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:subMenus.group.selectedRow.integerValue inSection:indexPath.section]];

            if (uncheckCell.accessoryType == UITableViewCellAccessoryCheckmark) {

                SubMenus *subMenu = [self.indexPathController.dataModel itemAtIndexPath:[NSIndexPath indexPathForRow:subMenus.group.selectedRow.integerValue inSection:indexPath.section]];

                subMenu.selected = @(NO);


                if (subMenus.price.floatValue > 0) {

                    self.totalPrice = [self subtractSubMenuPrice:subMenus.price.floatValue fromProductPrice:self.totalPrice];

                }

            }




        }else if (self.cartProduct) {

            uncheckCell = [tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:subMenusInProductCart.group.selectedRow.integerValue inSection:indexPath.section]];

            if (uncheckCell.accessoryType == UITableViewCellAccessoryCheckmark) {


                SubMenuProductCart *subMenuProductCart = [self.indexPathController.dataModel itemAtIndexPath:[NSIndexPath indexPathForRow:subMenus.group.selectedRow.integerValue inSection:indexPath.section]];
                subMenuProductCart.selected = @(NO);

                if (subMenuProductCart.subMenu.price.floatValue > 0) {
                    self.totalPrice = [self subtractSubMenuPrice:subMenuProductCart.subMenu.price.floatValue fromProductPrice:self.totalPrice];
                }


            }




        }

        uncheckCell.accessoryType = UITableViewCellAccessoryNone;



    }

    if ([subMenus.group.selectedRow isEqualToNumber:@(indexPath.row)])
    {

        if (self.product) {

            subMenus.selected = @(NO);

            subMenus.group.selectedRow = nil;


            if (subMenus.price.floatValue > 0) {


                self.totalPrice = [self subtractSubMenuPrice:subMenus.price.floatValue fromProductPrice:self.totalPrice];

            }

        }

    }else {

        UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

        cell.accessoryType = UITableViewCellAccessoryCheckmark;

        if (self.product) {

            subMenus.selected = @(YES);

            subMenus.group.selectedRow = @(indexPath.row);


            if (subMenus.price.floatValue > 0) {
                self.totalPrice = [self addSubMenuPrice:subMenus.price.floatValue toProductPrice:self.totalPrice];
            }


        }else if (self.cartProduct) {

            subMenusInProductCart.selected = @(YES);

            subMenusInProductCart.group.selectedRow = @(indexPath.row);

            if (subMenusInProductCart.subMenu.price.floatValue > 0) {
                self.totalPrice = [self addSubMenuPrice:subMenusInProductCart.subMenu.price.floatValue toProductPrice:self.totalPrice];
            }

        }


    }

上面的代码正在运行,但我认为它们必须是一个更好的解决方案,而不是在Core Data中保存选定的行?请记住,选定的状态将在以后被操纵,因为用户可以更改他或她的选择(购物车)。当前,所选对象(行)将传递给具有独立选定行属性的另一个对象(关系对象)。

为了说明我的设置:

enter image description here

那么是否有更好更通用的方法来处理每个部分使用Core Data对象的这一个选择,而不是使用NSMangedObject保存所选行,这看起来似乎不是MVC'ish?

1 个答案:

答案 0 :(得分:1)

如果selectedRow是数据模型中有意义的部分,我认为在Core Data中保存选定状态没有问题。我不确定selectedselectedRow属性之间的关系是什么,但理想情况下,您只会使用其中一个属性。