选择一行后,UITableView会自动选择另一行

时间:2016-01-11 08:45:50

标签: ios xcode swift uitableview

我正在开发一个具有表视图的应用程序, 每个表视图单元格只包含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}   
    }
}

3 个答案:

答案 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。