Как удалить выделенную / выделенную ячейку в UICollectionView в другом View Controller для Swift 4.2 - PullRequest
0 голосов
/ 07 февраля 2019

Я использую UICollectionView, который позволяет только один выбор.Текущая проблема, с которой я сталкиваюсь, заключается в том, что даже после нажатия других вкладок / кнопок для перехода к другому контроллеру представления выделенная ячейка все еще остается.Что я хочу сделать, так это то, что когда я нажимаю на другие вкладки, на которых показан другой контроллер представления, подсвеченная ячейка автоматически становится невыделенной.

Ниже приведен мой код:

override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

    collectionView.allowsMultipleSelection = false


    collectionView.allowsSelection = true
    let cell = collectionView.cellForItem(at: indexPath)
    cell?.layer.borderWidth = 2.0
    cell?.layer.borderColor = UIColor.blue.cgColor
    if previouslySelected != nil{
        if let previousCell =  collectionView.cellForItem(at: previouslySelected!){
            previousCell.layer.borderWidth = 0
            previousCell.layer.borderColor = .none
        }
    }

}

override func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) {
    collectionView.allowsMultipleSelection = false
    let cell = collectionView.cellForItem(at: indexPath)
    cell?.layer.borderWidth = 0
    cell?.layer.borderColor = .none
    if previouslySelected != nil{
        if let previousCell =  collectionView.cellForItem(at: previouslySelected!){
            previousCell.layer.borderWidth = 0
            previousCell.layer.borderColor = .none
        }
    }


}

Редактировать: у меня естьзаметил, что после нажатия кнопки «Далее» и выбора других ячеек выбранная ячейка изменится, но предыдущая ячейка все еще будет выделена (хотя она больше не выбрана).Есть идеи, как убрать выделение для невыбранной ячейки?

1 Ответ

0 голосов
/ 27 февраля 2019

Просто поделился, как мне удалось решить:

объявить в class CollectionViewController: UICollectionViewController

var currentlySelected: Int?
var previouslySelected: IndexPath?

далее, в функции cellForItemAt,

if currentlySelected != nil && currentlySelected == indexPath.row
        {
            uploadPostButton.isEnabled = true
            cell.layer.borderColor = UIColor.blue.cgColor
            cell.layer.borderWidth = 2.0
        }
        else
        {
            cell.layer.borderColor = .none
            cell.layer.borderWidth = 0
        }

также в didSelectItemAt

collectionView.allowsMultipleSelection = false
        if previouslySelected != nil{
            if let cell = collectionView.cellForItem(at: previouslySelected!){
                cell.layer.borderColor = .none
                cell.layer.borderWidth = 0
            }
        }
        currentlySelected = indexPath.row
        previouslySelected = indexPath

        // For reload the selected cell
        self.collectionView.reloadItems(at: [indexPath])//this is to "refresh" the selection

Итак, это своего рода достижение того, чего я хотел, но я уверен, что есть более чистый / лучший способ, которым я хотел бы научиться!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...