Выполните переход из UICollectionViewCell, чтобы показать подробный экран не работает - PullRequest
0 голосов
/ 02 ноября 2019

У меня есть ViewController, который содержит UICollectionView, где каждая ячейка является пользовательской ячейкой. Мне нужно выполнить переход, поэтому, когда пользователь перебирает любую ячейку, отображается новый ViewController для отображения деталей нажатой ячейки.

С кодом, который у меня есть сейчас, переход выполняетсяесли я нажму на камеру двумя пальцами, но не одним. Более того, когда DetailsViewController отображается, заголовок не обновляется.

Я не могу опубликовать изображения, но переход, который я создаю в раскадровке, переходит из ячейки в DetailsViewController, имеет тип Show (например, Push) иid is showDetail.

ViewController.swift

override func viewDidLoad() {
    super.viewDidLoad()

    collectionView.dataSource = self
    collectionView.delegate = self
    collectionView.register(UINib.init(nibName: "MovieCell", bundle: nil), forCellWithReuseIdentifier: "MovieCell")


    let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(UIInputViewController.dismissKeyboard))
    view.addGestureRecognizer(tap)
}

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    performSegue(withIdentifier: "showDetail", sender: indexPath)
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if(segue.identifier == "showDetail") {
        guard let viewController = segue.destination as? DetailsViewController else {return}
        guard let indexPath = sender as? IndexPath else {return}
        viewController.movie = self.moviesList[indexPath.row]
    }
}

DetailsViewController.swift

class DetailsViewController: UIViewController {


    var movie: Movie? = nil {
        didSet {
            navigationController?.title = movie?.title
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }

}

Есть идеи, что происходит не так?

1 Ответ

0 голосов
/ 02 ноября 2019

Измените отправителя на ячейку collectionView:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    performSegue(withIdentifier: "showDetail", sender: MovieCell)
}

Используйте это при подготовке к переходу:

if(segue.identifier == "showDetail") {
    guard let viewController = segue.destination as? DetailsViewController else {return}
    let cell = sender as MovieCell
    guard let indexPath = self.collectionView!.indexPathForCell(cell) else {return}
    viewController.movie = self.moviesList[indexPath.row]
}
...