Могу ли я передать изображение на SecondViewController на FirstViewController? - PullRequest
1 голос
/ 15 марта 2020

В First ViewController я нажимаю кнопку и открываю SecondViewController, который просматривает коллекцию изображений. Когда я нажимаю на изображение, представление показывает полноэкранное изображение и возвращается в представление коллекции. Можно ли передать изображение первому (начальному) viewcontroller, чтобы использовать его в качестве фона?


class SecondViewController: UIViewController {
    @IBAction func returnHome(_ sender: UIButton) {
        //self.dismiss(animated: true, completion: nil)
        self.performSegue(withIdentifier: "backToHome", sender: nil)
    }
    var images = ["bg13", "bg11", "bg6", "bg10", "bg12", "bg5", "bg3", "bg4", "bg2", "bg7", "bg8", "bg9", "bg1", "bg14"]
    // ...
    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        let imageViewCollection = UIImageView(image:UIImage(named: images [indexPath.item]))
        imageViewCollection.frame = self.view.frame
        imageViewCollection.backgroundColor = .black
        imageViewCollection.contentMode = .top
        imageViewCollection.isUserInteractionEnabled = true
        let tap = UITapGestureRecognizer(target: self, action: #selector(dismissFullscreenImage))
        imageViewCollection.addGestureRecognizer(tap)
        imageViewCollection.addGestureRecognizer(tap)
        imageViewCollection.isUserInteractionEnabled = true
        self.view.addSubview(imageViewCollection)
    }      
    @objc func dismissFullscreenImage(_ sender: UITapGestureRecognizer) {
        sender.view?.removeFromSuperview()
    }
}

1 Ответ

0 голосов
/ 13 апреля 2020

Вы можете использовать Delegate для передачи изображения в первый контроллер представления. Запишите этот протокол поверх контроллера второго представления.

protocol SecondViewControllerDelegate: NSObject {
    func sendToFirstViewController(image: UIImage)
}

Затем создайте переменную внутри контроллера второго представления

class SecondViewController: UIViewController {
    ....
    weak var customDelegate: SecondViewControllerDelegate?
    ....
}

Вызовите это из collectionView: didSelectItemAt: indexPath method

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    let image = UIImage(named: images [indexPath.item])
    customDelegate?.sendToFirstViewController(image: image)
    ...
}

В First viewController, в котором вы создаете экземпляр второго контроллера представления, поместите эту строку

secondVc.customDelegate = self

, затем создайте расширение для реализации метода делегата

extension FirstViewController: SecondViewControllerDelegate {
    func sendToFirstViewController(image: UIImage){
        // use this image as your background
    }
}
...