选择 TableView 单元格激活多个部分的行中的复选标记
Selecting TableView Cell Activates Checkmark in Rows in Multiple Sections
我在 cellForRowAt
中使用以下代码实现了复选标记(当行被 selected 时):
// Add a checkmark to row when selected
if selectedIngredients.contains(indexPath.row) {
cell.accessoryType = .checkmark
} else {
cell.accessoryType = .none
}
然而,当我 select 一行时,each 部分的 index.row 得到复选标记:
这似乎是因为我只指定了 indexPath.row,而不是部分。我如何编写此代码,以便 只有 我 selected 部分中的 selected 行得到复选标记?
您应该在 didSelect 方法中添加复选标记,并在 didDeselect 方法中删除它们;
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){
// update cell here
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
// update cell here
}
另外,看看这个答案;
像这样使用数据存储来保存复选标记:
var selectedIngredients: Set<IndexPath> = [] // use set for unique save
然后选择回调:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){
if self.selectedIngredients.contains(indexPath) {
self.selectedIngredients.remove(indexPath)
} else {
self.selectedIngredients.insert(indexPath)
}
self.tableView.reloadData()
}
在 CellForRow 中重新加载后:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if selectedIngredients.contains(indexPath) {
cell.accessoryType = .checkmark
} else {
cell.accessoryType = .none
}
}
如果你希望它只有一行包含复选标记:
var selectedIngredients: IndexPath? = nil
并选择回调:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){
self.selectedIngredients = indexPath
}
最后:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if selectedIngredients == indexPath {
cell.accessoryType = .checkmark
} else {
cell.accessoryType = .none
}
}
我在 cellForRowAt
中使用以下代码实现了复选标记(当行被 selected 时):
// Add a checkmark to row when selected
if selectedIngredients.contains(indexPath.row) {
cell.accessoryType = .checkmark
} else {
cell.accessoryType = .none
}
然而,当我 select 一行时,each 部分的 index.row 得到复选标记:
这似乎是因为我只指定了 indexPath.row,而不是部分。我如何编写此代码,以便 只有 我 selected 部分中的 selected 行得到复选标记?
您应该在 didSelect 方法中添加复选标记,并在 didDeselect 方法中删除它们;
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){
// update cell here
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
// update cell here
}
另外,看看这个答案;
像这样使用数据存储来保存复选标记:
var selectedIngredients: Set<IndexPath> = [] // use set for unique save
然后选择回调:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){
if self.selectedIngredients.contains(indexPath) {
self.selectedIngredients.remove(indexPath)
} else {
self.selectedIngredients.insert(indexPath)
}
self.tableView.reloadData()
}
在 CellForRow 中重新加载后:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if selectedIngredients.contains(indexPath) {
cell.accessoryType = .checkmark
} else {
cell.accessoryType = .none
}
}
如果你希望它只有一行包含复选标记:
var selectedIngredients: IndexPath? = nil
并选择回调:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){
self.selectedIngredients = indexPath
}
最后:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if selectedIngredients == indexPath {
cell.accessoryType = .checkmark
} else {
cell.accessoryType = .none
}
}