UITableViewCell不会在swift中保持突出显示

时间:2016-09-07 10:18:12

标签: ios swift uitableview

我在侧面菜单/导航抽屉中为我的表视图创建了一个自定义单元格,并且大多数情况下一切似乎都正常工作,但是当我选择其中一行(将我带到另一个ViewController)时,然后来通过导航抽屉从后续的表格视图返回,单元格仍然被取消。 例如:当我从侧面菜单表视图中选择A时,我将被带到AViewController,当我选择B时,我将被带到BViewController。所以基本上当我选择A并回到侧面菜单时,A应该保持突出显示。我怎样才能做到这一点。 代码:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    tableView.deselectRowAtIndexPath(indexPath, animated: true)
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! slideMenuIconTableViewCell

    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

    switch indexPath.row {
    case 0:
        let viewController:UIViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("MyCartViewController")
        sideMenuViewController?.contentViewController = UINavigationController(rootViewController: viewController)
        sideMenuViewController?.hideMenuViewController()
        break
    case 1:
        let nextViewController:ProductListingViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("ProductListingViewController") as! ProductListingViewController
        nextViewController.productID = "1"
        nextViewController.navigationTitle = "Tables"

        sideMenuViewController?.contentViewController = UINavigationController(rootViewController: nextViewController)
        sideMenuViewController?.hideMenuViewController()
        break
    case 2:
        let nextViewController:ProductListingViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("ProductListingViewController") as! ProductListingViewController
        nextViewController.productID = "3"
        nextViewController.navigationTitle = "Sofas"

        sideMenuViewController?.contentViewController = UINavigationController(rootViewController: nextViewController)
        sideMenuViewController?.hideMenuViewController()
        break

    default:
        break
    }

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:2)

您不应重新加载或分配表以将行的状态保持为选中状态。当您在viewWillAppear中重新加载表时,它会重置您的表未显示先前选择的结果。由于您的要求是在true重新加载,然后解决方案将是

1 - 保留一个全局变量以保持选中viewWillAppear。 (保持索引可能是错误的,因为您的列表内容是动态的)

2 - 在重新加载之前过滤掉先前在全局对象中指定的对象。

3 - 找出数组中对象的索引。

4 - 然后使用object中的条件语句使特定行突出显示。

希望它能帮到你

快乐的编码......

答案 1 :(得分:1)

您可以在类slideMenuIconTableViewCell'isHighlighted'中添加bool,并在选中时将其设置为true。返回到tableview后,检查布尔值并为单元格指定其他背景颜色。

答案 2 :(得分:1)

伙计们,我找到了解决方案。我从Janmenjaya上面提到的建议(https://stackoverflow.com/a/39382360/6077720)中获得了帮助,并编写了以下有效的代码:

var cellToDeSelect:UITableViewCell?
var isHighlighted: Bool?


func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    cellToDeSelect = tableView.cellForRowAtIndexPath(indexPath)!
    cellToDeSelect?.contentView.backgroundColor = UIColor.grayColor()
    isHighlighted = true
}

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

    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! slideMenuIconTableViewCell
    cell.layoutMargins = UIEdgeInsetsZero
    cell.contentView.backgroundColor = UIColor.clearColor()
    if (isHighlighted == true){
        cellToDeSelect?.contentView.backgroundColor = UIColor.grayColor()

    }

    return cell
}