如何确定2个ViewController之间的通过日期

时间:2019-05-17 15:41:49

标签: ios swift

我尝试将imageName字符串数据从ViewController传递到ImageViewController 也是func slideImageTapped函数正在将数据发送到CPImageSlider类

//  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)
    }

}

2 个答案:

答案 0 :(得分:0)

我不明白您的委托人的意思,是否存在阻止您在实例化 ImageViewController 后仅设置imageName的问题?

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)")
}

然后将图像设置在其中:

var imageName:String? {
    didSet {
        image.image = UIImage(named: imageName ?? "wallpaper1.jpg")
    }
}

答案 1 :(得分:0)

在调用委托方法之前,必须先初始化passDataDelegate。

    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)")
    }