我正在开发一个我编写购物应用程序的项目。我在一个大的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中的首发新手,提前感谢。
答案 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是有关如何使用自定义单元格的教程。跳到以设计自己的原型单元格开头的部分。希望这有帮助!