我尝试每个部分只显示一个复选标记。因此,当用户选择一个部分中的行时,应取消选择此行中的最后一个选定行,并选中带有复选标记的新行。我想接近这个非常动态和通用的,因为会有一些动态的部分。
到目前为止我的内容如下:
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中保存选定的行?请记住,选定的状态将在以后被操纵,因为用户可以更改他或她的选择(购物车)。当前,所选对象(行)将传递给具有独立选定行属性的另一个对象(关系对象)。
为了说明我的设置:
那么是否有更好更通用的方法来处理每个部分使用Core Data对象的这一个选择,而不是使用NSMangedObject保存所选行,这看起来似乎不是MVC'ish?
答案 0 :(得分:1)
如果selectedRow
是数据模型中有意义的部分,我认为在Core Data中保存选定状态没有问题。我不确定selected
和selectedRow
属性之间的关系是什么,但理想情况下,您只会使用其中一个属性。