在我的tableview单元格中有一个不会打开或关闭的复选标记。不知道为什么。无论我按了多少次复选标记来选中/取消选中它,它都不会改变状态。
ChecklistViewController.swift
import UIKit
class ChecklistViewController: UITableViewController {
var items: [ChecklistItem]
required init?(coder aDecoder: NSCoder) {
items = [ChecklistItem]()
let row0item = ChecklistItem()
row0item.text = "Walk the dog"
row0item.checked = false
items.append(row0item)
let row1item = ChecklistItem()
row1item.text = "Brush my teeth"
row1item.checked = true
items.append(row1item)
let row2item = ChecklistItem()
row2item.text = "Learn iOS development"
row2item.checked = true
items.append(row2item)
let row3item = ChecklistItem()
row3item.text = "Soccer practice"
row3item.checked = false
items.append(row3item)
let row4item = ChecklistItem()
row4item.text = "Eat ice cream"
row4item.checked = true
items.append(row4item)
super.init(coder: aDecoder)
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return items.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("ChecklistItem", forIndexPath: indexPath)
let item = items[indexPath.row]
let label = cell.viewWithTag(1000) as! UILabel
label.text = item.text
configureTextForCell(cell, withChecklistItem: item)
configureCheckmarkForCell(cell, withChecklistItem: item)
return cell
}
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
if let cell = tableView.cellForRowAtIndexPath(indexPath) {
let item = items[indexPath.row]
item.checked = !item.checked
item.toggleChecked()
configureCheckmarkForCell(cell, withChecklistItem: item)
}
tableView.deselectRowAtIndexPath(indexPath, animated: true)
}
func configureCheckmarkForCell(cell: UITableViewCell, withChecklistItem item: ChecklistItem) {
if item.checked {
cell.accessoryType = .Checkmark
} else {
cell.accessoryType = .None
}
}
func configureTextForCell(cell: UITableViewCell, withChecklistItem item: ChecklistItem) {
let label = cell.viewWithTag(1000) as! UILabel
label.text = item.text
}
@IBAction func addItem() {
let newRowIndex = items.count
let item = ChecklistItem()
item.text = "I am a new row"
item.checked = false
items.append(item)
let indexPath = NSIndexPath(forRow: newRowIndex, inSection: 0)
let indexPaths = [indexPath]
tableView.insertRowsAtIndexPaths(indexPaths, withRowAnimation: .Automatic)
}
}
清单项目.swift
导入基础
class ChecklistItem {
var text = ""
var checked = false
func toggleChecked() {
checked = !checked
}
}
最佳答案
我想你在tableView didSelectRowAtIndexPath中有个输入错误
//1
item.checked = !item.checked //2
item.toggledChecked() //3
//4
//假设item.checked==true
item.checked=项!item.checked(false)//false
toggleChecked->item.checked=!item.checked//true项
//item.checked==item.checked为1,无更改
所以你需要删除第2行。
关于ios - 选中标记不会打开/关闭,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37076704/