swift - 如何将图像从 UITableViewCell 传递到 UIImage

标签 swift xcode uitableview uiimage swift3

My segues我试图弄清楚是否有一种方法可以将我选择的单元格中的图像传递到完全不同的 View Controller 中的新 UIImageView 。我不完全理解转场是如何工作的,经过几个小时的深思熟虑,我还没有完全找到解决方案。我已经能够在 tableview 中显示我的图像,但我想将所选图像发送到 UIImageView 以获得更大的图片 View 。我目前有 2 个 VC 来做这件事。第一个称为 TableView

import UIKit

class TableView: UITableViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {


    @IBAction func toImage(_ sender: Any) {
        performSegue(withIdentifier: "ImageView", sender: self)
    }

    // Properties
    var imagesDirectoryPath:String!
    var images:[UIImage]!
    var titles:[String]!

    @IBAction func choosePhoto(_ sender: AnyObject) {
        let imagePicker = UIImagePickerController()
        if UIImagePickerController.isSourceTypeAvailable(.camera){
            imagePicker.sourceType = .photoLibrary
            print("Library selected")
        }else{
            print("No cam here!")
        }

        present(imagePicker, animated: true, completion: nil)
        imagePicker.delegate = self

    }

    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.delegate = self
        tableView.dataSource = self

        self.tableView!.register(UITableViewCell.self, forCellReuseIdentifier:"CellID")

        images = []

        let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
        // Get the Document directory path
        let documentDirectorPath:String = paths[0]
        // Create a new path for the new images folder
        imagesDirectoryPath = documentDirectorPath + "/ImagePicker"
        var objcBool:ObjCBool = true
        let isExist = FileManager.default.fileExists(atPath: imagesDirectoryPath, isDirectory: &objcBool)
        // If the folder with the given path doesn't exist already, create it
        if isExist == false{
            do{
                try FileManager.default.createDirectory(atPath: imagesDirectoryPath, withIntermediateDirectories: true, attributes: nil)
            }catch{
                print("Something went wrong while creating a new folder")
            }
        }
    }


    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func refreshTable(){
        do{
            images.removeAll()
            titles = try FileManager.default.contentsOfDirectory(atPath: imagesDirectoryPath)
            for image in titles{
                let data = FileManager.default.contents(atPath: imagesDirectoryPath + "/\(image)")
                let image = UIImage(data: data!)
                images.append(image!)
            }
            self.tableView.reloadData()
        }catch{
            print("Error")
        }
    }


    //MARK: UIImagePickerControllerDelegate Protocol
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) {

        // Save image to Document directory
        var imagePath = Date().description
        imagePath = imagePath.replacingOccurrences(of: " ", with: "")
        imagePath = imagesDirectoryPath + "/\(imagePath).png" //this would change depending on the name of the image
        let data = UIImagePNGRepresentation(image)
        _ = FileManager.default.createFile(atPath: imagePath, contents: data, attributes: nil)
        dismiss(animated: true) { () -> Void in
            self.refreshTable()
        }
    }

    //MARK: UITableView DataSource
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell:UITableViewCell! = tableView.dequeueReusableCell(withIdentifier: "CellID")

        cell?.imageView?.image = images[indexPath.row]
        cell.textLabel?.text = titles[indexPath.row]
        return cell
    }
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return images.count
    }

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        performSegue(withIdentifier: "ImageView", sender: images[indexPath.row])
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        var secondVC : ImageView = segue.destination as! ImageView

        //secondVC.fullView = imagesDirectoryPath[IndexPath.row]
    }



}

这是我的 ImageView,我希望单元格中的图像出现在其中。

import UIKit

class ImageView:ViewController{

    @IBOutlet var fullView: UIImageView!
    var selectedImage = UIImage()
    override func viewDidLoad() {
        super.viewDidLoad()
        self.fullView.image = self.selectedImage //Assign selected Image here




    }
    //segue via a button
    @IBAction func toTable(_ sender: Any) {
        performSegue(withIdentifier: "TableView", sender: self)

    }


}

有什么方法可以将现有图像传递到另一个 VC 中的 UIImageView 吗?我查遍了谷歌,但似乎无法弄清楚。

谢谢!

最佳答案

在 Storyboard文件中,确保将自定义类设置为 Segue 目标 Nib 上的 SecondViewController:

enter image description here

关于swift - 如何将图像从 UITableViewCell 传递到 UIImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40815895/

相关文章:

ios - 如何使用 ARKit 放置 OBJ 类型的 3D 模型?

swift - SceneKit 物理在局部空间中添加速度

xcode - swift 中的 AVRecorder 和 AVPlayer

swift - 如何在 Swift 3 中的两个 View 之间画一条线?

swift - 用在线文件目录填充 TableView

ios - 刷新控件 - 显示在电视上方

ios - 在 native iOS 中使用 NSKeyedArchiver 序列化的 Unity 中反序列化 ARWorldMap

ios - swift : Separate classes for network requests

iPhone 崩溃日志 - 是什么原因?

ios - 表格 View 元素的重复