我在侧面菜单/导航抽屉中为我的表视图创建了一个自定义单元格,并且大多数情况下一切似乎都正常工作,但是当我选择其中一行(将我带到另一个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
}
有人可以帮忙吗?
答案 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
}