我有一个tableViewCell,它使用单元格accessoryType
中的复选标记。我有一个函数将单元格的内容放入textField,同样在取消选中文本字段时删除文本。
它似乎工作正常,但如果我检查一个单元格并想要检查一个不可见的单元格(IOW)我需要滚动tableView,检查的单元格(现在不可见)似乎取消选中它自己(仅当我检查一个新的可见细胞时。)
多重选择仅适用于可见细胞。
这是我的代码:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier(textCellIdentifier, forIndexPath: indexPath)
let row = indexPath.row
cell.textLabel?.text = painArea[row]
cell.accessoryType = .None
return cell
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
//selectedRow = indexPath
tableView.deselectRowAtIndexPath(indexPath, animated: true)
let row = indexPath.row
let cell = tableView.cellForRowAtIndexPath(indexPath)
if cell!.accessoryType == .Checkmark {
cell!.accessoryType = .None
} else {
cell!.accessoryType = .Checkmark
}
populateDescription()
print(painArea[row])
}
var painDescription = ["very sore"]
func populateDescription() {
painDescription.removeAll()
severityText.text = ""
for cell in tableView.visibleCells {
if cell.accessoryType == .Checkmark {
painDescription.append((cell.textLabel?.text)! + " ")
}
var painArea = ""
var i = 1
while i <= painDescription.count {
painArea += painDescription[i-1] + "~"
i = i + 1
}
severityText.text = painArea
}
我希望我能充分解释自己。我不希望取消选中非可见单元格,从而将其从文本字段中删除,除非我取消选中它。
任何想法都会受到最高的赞赏。
亲切的问候
韦恩
答案 0 :(得分:1)
由于Cell的可重用性而受到欢迎。而不是在Checkmark
中设置didSelect
,而是尝试在cellForRowAtIndexPath
中设置。您还需要创建这样的model
类来解决您的问题
class ModelClass: NSObject {
var isSelected: Bool = false
//Declare other property that you are using cellForRowAtIndexPath
}
现在在isSelected
中查看此cellForRowAtIndexPath
,如下所示。
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier(textCellIdentifier, forIndexPath: indexPath)
let row = indexPath.row
let modelClass = painArea[row]
cell.textLabel?.text = modelClass.name
if modelClass.isSelected {
cell.accessoryType = .Checkmark
}
else {
cell.accessoryType = .None
}
return cell
}
现在像这样改变你的didSelect
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
var modelClass = painArea[indexPath.row]
modelClass.isSelected = !modelClass.isSelected
self.tableView.reloadData()
populateDescription()
print(painArea[row])
}
希望这会对你有所帮助。
答案 1 :(得分:0)
这是因为每当你将单元格滚出视图并向后滚动时,它将再次调用cellForRow
并将所有内容恢复为默认值,你需要做的就是创建一个正确的dataSource,每当检查了一个单元格,用Bool更新dataSource表示它已被检查,然后在cellForRow
或cellWillDisplay