如何向表格单元格添加复选框

时间:2016-06-30 21:01:29

标签: ios cocoa-touch

我正在开发一个我编写购物应用程序的项目。我在一个大的UIViewController中有2个表视图。

从图片中可以看出,我的第一张表叫products,第二张表piesa。我的第一个表作为我库存的物品(plafon, plafon cu 2 parti culisante, etc)的列表,当我点击表中的一个项目时,它将从那里删除它并将其添加到我的第二个表格。它像购物清单一样工作。我实现了这部分。我被困在第二部分。

我现在想要的是:在表2中的项目上,例如第一个单元格plafon上有4个复选框。它会像What do you want to do with your item? Replaced, paint it, repair or or repaint it那样工作。有4个选项。

我的问题是,如何从第二个表中为每个表格单元格添加复选框。有没有办法让复选框相互依赖(例如,不能同时激活2个复选框:repaint and paint,只有一个或2个不同,如repair and repaint)。

我是iOS中的首发新手,提前感谢。

2 个答案:

答案 0 :(得分:2)

你不应该在控制器中有2个表,事实上这不是一个好习惯。

你需要的是2个部分,没有别的。有了它,你只能使用一个表。

其余的是逻辑问题而没有别的。

您必须在对象中添加new key,告诉您是否被选中。

在您的自定义单元格中(我希望并假设您必须使用一个)。创建一个按钮,根据您添加的新密钥更改状态(请记住此密钥必须是布尔值,例如"isSelected" = true)。

您需要的对象应该是:

data = 
(
  {
    sectionName: "Piese disponible"
    rows: (
      {
        name: "Plafon",
        isSelected: false //if need this param in this section
      },
      {
        name: "Plafon cu 2 parti culisante",
        isSelected: false //if need this param in this section
      },
      {
        name: "etc etc etc",
        isSelected: false //if need this param in this section
      }
    )
  },
  {
    sectionName: "Piese"
    rows: (
      {
        name: "Plafon",
        isSelected: false //for the checkbox btn
      }
    )
  }
)

didSelectRowAtIndexPath委托方法中,您需要更改isSelected密钥。

let cell = tableView.cellForRowAtIndexPath(indexPath) as! yourCustomTableViewCell
let eachRow = yourArray.objectAtIndex(indexPath.row)
let isSelected = eachRow["isSelected"] as! Bool

if isSelected == false {
    eachRow.setValue(true, forKey: "isSelected")
}

tableView.reloadRowsAtIndexPaths([NSIndexPath(forRow: indexPath.row, inSection: indexPath.section)], withRowAnimation: .Fade)

我需要unselect最后选择的单元格,创建一个循环并使用isSelected键在true中搜索对象并设置为false并在该单元格中使用reloadRowsAtIndexPaths

类似的东西:

for eachInfo in yourArray {
    let isSelectedRow = eachRow["isSelected"] as! Bool
    if isSelectedRow == true {
        eachInfo.setValue(false, forKey: "isSelected")
        tableView.reloadRowsAtIndexPaths([NSIndexPath(forRow: i, inSection: theSection)], withRowAnimation: .Fade)
        break
    }
    i += 1
}

但是,考虑到单元格被重用并且必须使用新状态呈现按钮,必须将您的逻辑放在cellForRowAtIndexPath委托方法中。

喜欢的东西:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cellIdentifier = "yourcustomCellId"
    var cell: yourCustomTableViewCell! = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) as? yourCustomTableViewCell
    if cell == nil {
        tableView.registerNib(UINib(nibName: "yournibCellname", bundle: nil), forCellReuseIdentifier: cellIdentifier)
        cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) as? yourCustomTableViewCell

    }
    cell.selectionStyle = UITableViewCellSelectionStyle.None

    let eachRow = yourArray.objectAtIndex(indexPath.row)
    let isSelected = eachRow["isSelected"] as! Bool
    var imageNamebtn = "unselectedImage"
    if isSelected == true {
        imageName = "selectedImage"
    }
    cell.yourButon.backgroundImage = UIImage(named: imageName)
    return cell
}

For Build您需要使用来自numberOfSectionsInTableView的{​​{1}}部分的计数,并且要构建部分设计需要UITableViewDataSource

我希望我能帮助

答案 1 :(得分:1)

您需要制作自定义单元格。您可以将自己想要的任何内容更改为自定义单元格的UI,然后在代码中连接独占逻辑。 Here是有关如何使用自定义单元格的教程。跳到以设计自己的原型单元格开头的部分。希望这有帮助!