我正在开发一个具有表视图的应用程序, 每个表视图单元格只包含Label, 我把单元配件类型设置为CheckMark, 如果我选择一行,则会出现复选标记 一切都在努力
但是当我选择一行并向下滚动表格视图时,CheckMark会出现在其他行中, 所以请帮帮我
我已附上以下代码
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
tableView.deselectRowAtIndexPath(indexPath, animated: true)
let selectRow = self.MytableView.cellForRowAtIndexPath(indexPath)!
var can: Candy
if tableView == self.searchDisplayController?.searchResultsTableView{
can = self.filteredCandy[indexPath.row]
}else{
can = self.candies[indexPath.row]
}
let name = "\(can.firstName) \(can.lastName)"
if selectRow.accessoryType == UITableViewCellAccessoryType.None{
selectRow.accessoryType = UITableViewCellAccessoryType.Checkmark
selectRow.tintColor = UIColor.blackColor()
DataStorageManager.sharedInstance.guests.append(name)
}else{
selectRow.accessoryType = UITableViewCellAccessoryType.None
DataStorageManager.sharedInstance.guests == DataStorageManager.sharedInstance.guests.filter(){$0 != name}
}
}
答案 0 :(得分:0)
你正在做出逻辑上的错误,你要对新单元格进行复选标记,但是你没有对最后选择的行进行取消勾选。所以请实施我的逻辑。 首先创建一个像
这样的全局变量 let selectedRow = 0
And then implement this one
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let selectedIndexPath = NSIndexPath.init(forItem: selectedRow, inSection: 0)
let selectedCell = tableView.cellForRowAtIndexPath(selectedIndexPath)! as UITableViewCell
selectedCell.accessoryType = .None
let selectRow = self.MytableView.cellForRowAtIndexPath(indexPath)!
var can: Candy
if tableView == self.searchDisplayController?.searchResultsTableView{
can = self.filteredCandy[indexPath.row]
}else{
can = self.candies[indexPath.row]
}
let name = "\(can.firstName) \(can.lastName)"
if selectRow.accessoryType == UITableViewCellAccessoryType.None{
selectRow.accessoryType = UITableViewCellAccessoryType.Checkmark
selectRow.tintColor = UIColor.blackColor()
DataStorageManager.sharedInstance.guests.append(name)
}else{
selectRow.accessoryType = UITableViewCellAccessoryType.None
DataStorageManager.sharedInstance.guests == DataStorageManager.sharedInstance.guests.filter(){$0 != name}
}
selectedRow = indexPath.row
}
答案 1 :(得分:0)
我通过将以下代码添加到UITableView的cellForRowAtIndexPath方法来解决上述问题
if tableView == self.searchDisplayController?.searchResultsTableView{
can = self.filteredCandy[indexPath.row]
}else{
can = self.candies[indexPath.row]
}
答案 2 :(得分:0)
这里已解决了大多数TableViewCell问题,例如,滚动其余行后单击单元格按钮以及在 didSelectRowAt indexPath:IndexPath 中选择时,该行可能会更改,滚动后,可以选择其余的行。因此,我创建了一个应用来解决这些问题。在这里添加GitHub代码Find the code
在第一个屏幕中,单击红色按钮,然后向下滚动,您将不会看到UITableViewCell中的其他单元格自动受到影响。
在第一个屏幕中单击 didSelectRowAt indexPath:IndexPath ,您可以转到第二个屏幕的详细信息屏幕,在该屏幕中选择一行后,其他行将不会自动选择UITableViewCell。