Отмена выбора ячейки представления коллекции без изменения значения переменной - PullRequest
0 голосов
/ 27 марта 2019

Я пытаюсь изменить свою «выбранную» переменную так, чтобы при выборе символьной ячейки в представлении коллекции контроллер представления мог быть отклонен, когда пользователь нажимает кнопку (sendTapped).Однако при отмене выбора ячейки значение переменной не возвращается к ложному, поэтому контроллер представления отклоняется, когда пользователь отменяет выбор ячейки и затем нажимает кнопку.

class CharactersViewController: UIViewController, UICollectionViewDataSource,UICollectionViewDelegate {

let characters = [...]
let characterImages = [...]

var selectedIndex: Int?
var selected = false

override func viewDidLoad() {
    super.viewDidLoad()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

@IBAction func sendTapped(_ sender: Any) {
    ***if selected {
            self.dismiss(animated: true, completion: nil)
            let initialViewController = UIStoryboard.initialViewController(for: .main)
            self.view.window?.rootViewController = initialViewController
            self.view.window?.makeKeyAndVisible()
    }
}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return self.characters.count
}


func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CharacterViewCell

    cell.characterImage.image = UIImage(named: characterImages[indexPath.row])

    if selectedIndex == indexPath.row {
        cell.contentView.layer.borderColor = UIColor.yellow.cgColor
        cell.contentView.layer.borderWidth = 2.0
    }else{
        cell.contentView.layer.borderColor = UIColor.clear.cgColor
        cell.contentView.layer.borderWidth = 1.0
    }

    return cell
}

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    let character = characters[indexPath.row]
    ***selected = true
    selectedIndex = selectedIndex == indexPath.row ? nil : indexPath.row
    ProfileService.updateChild(child: "char", childVal: character)
    collectionView.reloadData()
}

func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) {
    ***selected = false
}

}

...