Я создал настраиваемую ячейку для представления таблицы в боковом меню / навигационном ящике, и по большей части все работает нормально, но когда я выбираю одну из строк (которая переводит меня в другой 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
    }

Кто-нибудь может помочь?

2
PersianBlue 7 Сен 2016 в 13:18

3 ответа

Лучший ответ

Ребят нашел решение. Я воспользовался помощью того, что предложил Джанменджая выше (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
}
1
Community 23 Май 2017 в 12:15

Вы можете добавить bool в класс slideMenuIconTableViewCell 'isHighlighted' и установить для него значение true при выборе. После того, как вы вернетесь в представление таблицы, проверьте логическое значение и придайте ячейке другой цвет фона.

1
KNV 7 Сен 2016 в 14:37

Вы не должны перезагружать или выделять таблицу, чтобы статус строки оставался выбранным. Когда вы перезагружаете таблицу в viewWillAppear, она сбрасывает выбор, в результате чего ваша таблица не показывает предыдущий выбор. Поскольку ваше требование - перезагрузить его в viewWillAppear, тогда решение будет

1 - Оставьте глобальную переменную, чтобы object оставался выбранным. (Сохранение индекса может быть ошибочным, поскольку содержимое вашего списка динамическое)

2 - Перед перезагрузкой отфильтруйте объект, ранее назначенный в глобальном объекте.

3 - Узнать индекс объекта в массиве.

4 - Затем используйте условный оператор внутри cellForRowAtIndex, чтобы выделить конкретную строку.

Надеюсь, это поможет тебе

Удачного кодирования ...

2
Janmenjaya 8 Сен 2016 в 03:56