滚动时,TableViewCell滚动选择错误的单元格

时间:2015-08-24 19:45:27

标签: ios swift uitableview

当我向上和向下滚动时,我的tableview会突出显示错误的单元格。在.Checkmark中,我正在尝试添加cell.textLabel?.text附件视图以及更改func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { var cell = tableView.dequeueReusableCellWithIdentifier("MyCell", forIndexPath: indexPath) as! MyCell cell.textLabel?.text = self.array[indexPath.row] return cell } func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { var cell: UITableViewCell = tableView.cellForRowAtIndexPath(indexPath)! if cell.accessoryType == UITableViewCellAccessoryType.Checkmark { cell.accessoryType = .None cell.textLabel!.font = UIFont(name: "HelveticaNeue", size: 16) tableView.deselectRowAtIndexPath(indexPath, animated: true) } else if cell.accessoryType == UITableViewCellAccessoryType.None { cell.accessoryType = .Checkmark cell.textLabel!.font = UIFont(name: "HelveticaNeue-Bold", size: 16) } tableView.deselectRowAtIndexPath(indexPath, animated: true) } 的字体。在滚动时,选择随机行,我手动选择的行有时会取消选择。

   function dateValidation() 
{
   var obj = document.getElementById("<%=txtDate.ClientID%>"); 
   var day = obj.value.split("/")[0];
   var month = obj.value.split("/")[1]; 
   var year = obj.value.split("/")[2];
   if ((day<1 || day >31) || (month<1&&month>12)&&(year.length != 4)) 
   {
      alert("Invalid Format");return false; 
   }

   else

   {
      var dt = new Date(year, month-1, day); 
      var today = new Date();
      if((dt.getDate() != day) || (dt.getMonth() != month-1) ||(dt.getFullYear()!=year) || (dt>today)) 
      {
         alert("Invalid Date");return false; 
      }
   }

}

1 个答案:

答案 0 :(得分:3)

声明将跟踪选择哪些行的数组:

var selectedRows:[Bool] = []

您需要确保使用与数据数组相同数量的项目填充它。

然后修改您的cellForRowAtIndexPath

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    var cell = tableView.dequeueReusableCellWithIdentifier("MyCell", forIndexPath: indexPath) as! MyCell

    cell.textLabel?.text = self.array[indexPath.row]
        if selectedRows[indexPath.row] {
            // row selected
            cell.accessoryType = .Checkmark
        }
        else {
            cell.accessoryType = .None
        }

    return cell

}

在您的didSelectRow功能添加行:

selectedRows[indexPath.row] = !selectedRows[indexPath.row]

当您从didSelectRow修改单元格时,下一次单元格出列时,它将具有您设置的附件类型。滚动后发生这种情况的原因是因为当您滚动可见的单元格时会出列。因此,您需要为它们手动设置正确的配件类型