gpt4 book ai didi

ios - 如何对 UITableView 使用复选标记

转载 作者:行者123 更新时间:2023-11-30 13:29:44 25 4
gpt4 key购买 nike

我正在尝试创建一个简单的待办事项列表应用程序以用于学习目的。我希望能够单击一行并添加复选标记,再次单击时我希望它消失。我看过其他几个例子,但没有任何效果。我怎样才能实现这个目标?

class FirstViewController: UIViewController, UITableViewDelegate,         UITableViewDataSource {

@IBOutlet weak var tbView: UITableView!



override func viewDidLoad() {
super.viewDidLoad()
tbView.reloadData()
}
override func viewWillAppear(animated: Bool) {
self.tbView.reloadData()
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
return tasks.manager.count
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "Default Tasks")

//Assign the contents of our var "items" to the textLabel of each cell
cell.textLabel!.text = tasks.manager[indexPath.row].name
cell.detailTextLabel!.text = tasks.manager[indexPath.row].time

return cell

}
func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath){

if (editingStyle == UITableViewCellEditingStyle.Delete){

tasks.manager.removeAtIndex(indexPath.row)
tbView.reloadData()
}
}

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let cell = tableView.cellForRowAtIndexPath(indexPath)
cell!.accessoryType = .Checkmark
tableView.reloadData()
}
}

最佳答案

简单来说,你可以使用这段代码。

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
if let cell = tableView.cellForRowAtIndexPath(indexPath)
if (cell!.accessoryType == .Checkmark) {
cell!.accessoryType = .None
} else {
cell!.accessoryType = .Checkmark
}
tableView.reloadData()
}

这样,当您重新选择单元格时,复选标记将相应调整。

但是,您不应该以这种方式修改单元格复选标记,因为滚动时单元格将被重新使用。您需要更新您的数据模型,而不是上面的方法。

因此,在您的数据模型中,添加新属性来保存复选标记状态,然后在 cellForRowAtIndexPath 函数中使用它。

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "Default Tasks")

//Assign the contents of our var "items" to the textLabel of each cell
cell.textLabel!.text = tasks.manager[indexPath.row].name
cell.detailTextLabel!.text = tasks.manager[indexPath.row].time

if tasks.manager[indexPath.row].isSelected { //assume that isSelected is bool
cell!.accessoryType = .Checkmark
} else {
cell!.accessoryType = .None
}

return cell
}

然后在您的 didSelectRowAtIndexPath 中更新模型。

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let dataModel = tasks.manager[indexPath.row]
dataModel.isSelected = !dataModel.isSelected
tableView.reloadData()
}

关于ios - 如何对 UITableView 使用复选标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36707377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com