-1

I try to pass imageName string data from ViewController to ImageViewController which also func sliderImageTapped is sending data to CPImageSlider class

//  ViewController.swift

import UIKit

let _AUTO_SCROLL_ENABLED : Bool = false

class ViewController: UIViewController, CPSliderDelegate {

    var imagesArray = [String]()
    var passDataDelegate: PassImageName?

    @IBOutlet weak var slider : CPImageSlider!

    @IBOutlet weak var autoSwitch : UISwitch!
    @IBOutlet weak var arrowSwitch : UISwitch!
    @IBOutlet weak var indicatorSwitch : UISwitch!
    @IBOutlet weak var sliderSwitch : UISwitch!
    @IBOutlet weak var circularSwitch : UISwitch!

    override func viewDidLoad() {
        super.viewDidLoad()

        imagesArray = ["wallpaper1.jpg","wallpaper2.jpg","wallpaper3.jpg","wallpaper4.jpg"]
        slider.images = imagesArray
        slider.delegate = self
        let zoom : CGFloat = 0.8
        autoSwitch.transform = CGAffineTransform(scaleX: zoom, y: zoom)
        arrowSwitch.transform = CGAffineTransform(scaleX: zoom, y: zoom)
        indicatorSwitch.transform = CGAffineTransform(scaleX: zoom, y: zoom)
        sliderSwitch.transform = CGAffineTransform(scaleX: zoom, y: zoom)
        circularSwitch.transform = CGAffineTransform(scaleX: zoom, y: zoom)

        autoSwitch.isOn = slider.autoSrcollEnabled
        arrowSwitch.isOn = slider.enableArrowIndicator
        indicatorSwitch.isOn = slider.enablePageIndicator
        sliderSwitch.isOn = slider.enableSwipe
        circularSwitch.isOn = slider.allowCircular
    }

    func sliderImageTapped(slider: CPImageSlider, imageName: String, index: Int) {

        passDataDelegate?.passData(clickedImageName: imageName)

        guard let destinationVC = storyboard?.instantiateViewController(withIdentifier: "ImageViewController") as? ImageViewController else {
            return
        }

        present(destinationVC, animated: true, completion: nil )

        print("\(index)")
    }
}

//  ImageViewController.swift

import UIKit

protocol PassImageName {
    func passData(clickedImageName:String)
}

class ImageViewController: UIViewController, PassImageName {

    @IBOutlet weak var image: UIImageView!

    var imageName:String?

    func passData(clickedImageName: String) {
         imageName = clickedImageName
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        image.image = UIImage(named: imageName ?? "wallpaper1.jpg")
    }

    @IBAction func dismiss(_ sender: UIButton) {
        dismiss(animated: true, completion: nil)
    }

}
RajeshKumar R
  • 15,445
  • 2
  • 38
  • 70
  • You need to call `passData` on `destinationVC`. – luk2302 May 17 '19 at 15:43
  • 4
    Possible duplicate of [Passing Data between View Controllers](https://stackoverflow.com/questions/5210535/passing-data-between-view-controllers) – RajeshKumar R May 17 '19 at 15:46
  • Possible duplicate of [Passing Data between View Controllers in Swift](https://stackoverflow.com/questions/24222640/passing-data-between-view-controllers-in-swift) – Alastar May 17 '19 at 15:49

2 Answers2

0

I don't understand the point of your delegate, is there something preventing you to just set the imageName after instantiating the ImageViewController ?

func sliderImageTapped(slider: CPImageSlider, imageName: String, index: Int) {
    guard let destinationVC = storyboard?.instantiateViewController(withIdentifier: "ImageViewController") as? ImageViewController else {
            return
        }

    destinationVC.imageName = imageName

    present(destinationVC, animated: true, completion: nil )

    print("\(index)")
}

And then just set your image inside it :

var imageName:String? {
    didSet {
        image.image = UIImage(named: imageName ?? "wallpaper1.jpg")
    }
}
TagTaco
  • 143
  • 5
0

You must initialize passDataDelegate before call the delegate method.

    func sliderImageTapped(slider: CPImageSlider, imageName: String, index: Int) {

        guard let destinationVC = storyboard?.instantiateViewController(withIdentifier: "ImageViewController") as? ImageViewController else {
            return
        }

        passDataDelegate = destinationVC
        passDataDelegate?.passData(clickedImageName: imageName)

        present(destinationVC, animated: true, completion: nil )

        print("\(index)")
    }
ab_casanova
  • 28
  • 1
  • 7