在选择和取消选择在tableView单元格中找到的记录时,出现一个复选标记附件。
我正在执行以下操作:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
selectRow()
tableView.cellForRow(at: indexPath)?.accessoryType = .checkmark
}
问题在于,在首次加载tableView时,如果记录已经存在,则总是需要轻按两下以取消选中复选标记。
override func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
unselectRow()
tableView.cellForRow(at: indexPath)?.accessoryType = .none
}
tableView基于具有以下结构的JSON:
var structure = [JSONStructure]()
struct JSONStructure: Codable {
var peron: String
var update: Int
}
如果update
的值为100,则如果该值为200,那么将应用复选标记。
这是在cellForRowAt
中完成的,如下所示:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let TableInfo: JSONStructure
if (TableInfo.update == 100) {
cell.accessoryType = .checkmark
} else {
cell.accessoryType = .none
}
}
当首次加载tableView并且由于满足update
条件而已存在一个复选标记时,如何避免双击以取消选择记录?
答案 0 :(得分:0)
func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
let cell = tableView.cellForRow(at: indexPath)
cell.accessoryType = .none
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let cell = tableView.cellForRow(at: indexPath)
cell.accessoryType = .checkmark
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cellData", forIndexPath: indexPath)
if (TableInfo.update == 100)
cell.accessoryType = .Checkmark
tableView.selectRowAtIndexPath(indexPath, animated: false, scrollPosition: UITableViewScrollPosition.Bottom)
} else {
cell.accessoryType = .None
}
return cell
}
答案 1 :(得分:0)
您的cellForRowAt
仅在视觉上标记了单元格(设置了附件类型),但是您还需要将其标记为UITableView逻辑已选中。在您的代表上实施willDisplay
并在那里更新所选状态。示例:
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
// .. get TableInfo for indexPath.row
let TableInfo: JSONStructure
if (TableInfo.update == 100) {
tableView.selectRow(at: indexPath, animated: false, scrollPosition: UITableView.ScrollPosition.none)
} else {
tableView.deselectRow(at: indexPath, animated: false)
}
}
请参见UITableViewCell Set selected initially,尽管某些选项在使用cellForRowAt
或willDisplayCell
方面有所不同。
有关选择为何使用willDisplay
和cellForRowAt
的原因,请参见iOS UITableView: what's the different between "cellForRowAtIndexPath" and "willDisplayCell: forRowAtIndexPath:"。