Передача данных с помощью функции переопределения подготовить с помощью collectionviewCell - PullRequest
0 голосов
/ 31 марта 2019

Я пытаюсь отправить строку charName из AvengersViewController в CharViewController.

Я использую представление коллекции в AvengersViewController.CharName - это метка в CharViewController.

То, что я пытаюсь, прекрасно работает с табличным представлением, но я не могу заставить его работать с использованием collectionViews ...

Я использую "lastItemSelectedA" дляуказать индекс метки из моего массива мстителей.Передача данных работает ... Я не могу получить индекс collectionViewItem для передачи с первым переходом, таким образом, делая его нулевым.Используя значение по умолчанию 0, я смог заметить, что он работает, однако он не изменяет значение lastItemSelectedA, когда ячейка нажата, но после ... Или, по крайней мере, не обновляет переменную.

Я уже испробовал как минимум 5 реализаций из решений в стеке.

extension AvengersViewController: UICollectionViewDelegate, UICollectionViewDataSource {

 func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        lastItemSelectedA = indexPath.item
        //self.performSegue(withIdentifier: "openToCharA", sender: indexPath.item)
    }
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        guard let identifier = segue.identifier else { return }

        switch identifier {
        case "openToCharA":


            if let destination = segue.destination as? CharViewController {
                destination.charName = avengers[lastItemSelectedA ?? 0].name
            }

            //destination.sounds = sounds
            //guard let indexPath = collectionView.indexPathsForSelectedItems else {return}
            //let sounds = fallen[lastItemSelectedF!].sounds

        default:
            print("unexpected segue identifier")
        }
}

1 Ответ

1 голос
/ 31 марта 2019

Если вызывается prepare(for segue, то вы подключили переход из представления коллекции ячейка (а не из контроллера ).

В этом случаеудалить

var lastItemSelectedA : Int

и

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    lastItemSelectedA = indexPath.item
    //self.performSegue(withIdentifier: "openToCharA", sender: indexPath.item)
}

и получить индексный путь ячейки представления коллекции из параметра sender

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "openToCharA" {
        let cell = sender as! UICollectionViewCell
        let indexPath = collectionView.indexPath(for: cell)!
        let destination = segue.destination as! CharViewController
        destination.charName = avengers[indexPath.item].name
    }
}

В этом случае принудительно разворачивать дополнительные параметры можно.Код не должен аварийно завершать работу, если все правильно подключено, и если он это делает, он обнаруживает ошибку design .

...