我有UITableView
,其中我将第一行的背景颜色设置为灰色。通过此代码
// showing the selection in UITableViewCell
if indexPath.row == 0
{
cell.backgroundColor = UIColor(red: 189 / 255, green: 189 / 255, blue: 189 / 255, alpha: 0.55)
}
现在我将代码放在didSelectItemAtIndexPath
中,将颜色更改为白色。
var cell = self.tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 0, inSection: 0))
// hiding the seleciton in UITableViewCell
if indexPath.row == 0
{
cell?.backgroundColor = UIColor.whiteColor()
}
当表格加载时,它会在第一行显示灰色背景,表示选择了第一行,并且值显示在DetailViewController
中。如果我单击其他行,则第0行颜色将变为白色,而其他行将由UITableSelectionStyleGrey
变为灰色。
表加载后,如果向下滚动很长。如果我连续选择,那么突然它应用程序崩溃并显示Fatal-Error : Unexpectedly found nil while unwrapping a nil value
。我不知道为什么会发生这种情况。我尝试将这些简单的代码放在dataSource和委托方法中,当我向下滚动并选择一行时仍然会出现相同的错误。
有任何建议吗?提前谢谢。
完整的代码如下。
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as WordsCustomTableViewCell
cell.selectionStyle = UITableViewCellSelectionStyle.Gray
// showing the selection in UITableViewCell
if indexPath.row == 0
{
cell.backgroundColor = UIColor(red: 189 / 255, green: 189 / 255, blue: 189 / 255, alpha: 0.55)
}
return cell
}
// MARK: - UITableViewDelegate Methods
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
{
var cell = self.tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 0, inSection: 0))
// hiding the selection in UITableViewCell
if indexPath.row == 0
{
cell?.backgroundColor = UIColor.whiteColor()
}
}
答案 0 :(得分:0)
您需要将选择数据保留在单独的结构中(我建议使用NSMutableSet)并添加已选择的行的indexPath。
稍后在cellForRowAtIndexPath
中,您需要检查indexPath是否在NSMutableSet内,并根据该配置单元格backgroundColor。在被选中后,您将被迫在索引路径重新加载表格行。
您遇到问题的行为原因是UITableViewCell
在不同的indexPath之间重复使用,并且它已准备好重复使用(重置选择)。
答案 1 :(得分:0)
如果我正确理解你的问题,试试这可能对你有帮助。
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
// var cell:UITableViewCell = self.tableObj.dequeueReusableCellWithIdentifier("cell") as UITableViewCell
// cell.textLabel?.text="I am learning swift Day \(indexPath.row)"
var cell:customTableViewCell = self.tableObj.dequeueReusableCellWithIdentifier("customCell") as customTableViewCell
cell.nameLbl.text=nameList[indexPath.row]
cell.imageView?.image=imgListArray[indexPath.row] as? UIImage
if indexPath.row == 0
{
cell.backgroundColor = UIColor(red: 189 / 255, green: 189 / 255, blue: 189 / 255, alpha: 0.55)
}
cell.selectionStyle = UITableViewCellSelectionStyle.Gray
return cell
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
{
var cell = self.tableObj.cellForRowAtIndexPath(NSIndexPath(forRow: 0, inSection: 0))
// hiding the selection in UITableViewCell
if indexPath.row != 0
{
cell?.backgroundColor = UIColor.whiteColor()
}
}