Я создал настраиваемую ячейку для представления таблицы в боковом меню / навигационном ящике, и по большей части все работает нормально, но когда я выбираю одну из строк (которая переводит меня в другой 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 ответа
Ребят нашел решение. Я воспользовался помощью того, что предложил Джанменджая выше (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
}
Вы можете добавить bool в класс slideMenuIconTableViewCell 'isHighlighted' и установить для него значение true при выборе. После того, как вы вернетесь в представление таблицы, проверьте логическое значение и придайте ячейке другой цвет фона.
Вы не должны перезагружать или выделять таблицу, чтобы статус строки оставался выбранным. Когда вы перезагружаете таблицу в viewWillAppear, она сбрасывает выбор, в результате чего ваша таблица не показывает предыдущий выбор. Поскольку ваше требование - перезагрузить его в viewWillAppear
, тогда решение будет
1 - Оставьте глобальную переменную, чтобы object
оставался выбранным. (Сохранение индекса может быть ошибочным, поскольку содержимое вашего списка динамическое)
2 - Перед перезагрузкой отфильтруйте объект, ранее назначенный в глобальном объекте.
3 - Узнать индекс объекта в массиве.
4 - Затем используйте условный оператор внутри cellForRowAtIndex
, чтобы выделить конкретную строку.
Надеюсь, это поможет тебе
Удачного кодирования ...
Похожие вопросы
Новые вопросы
ios
iOS - мобильная операционная система, работающая на Apple iPhone, iPod touch и iPad. Используйте этот тег [ios] для вопросов, связанных с программированием на платформе iOS. Используйте связанные теги [target-c] и [swift] для проблем, характерных для этих языков программирования.