代码之家  ›  专栏  ›  技术社区  ›  Platiplus

UIImageView将(segue)nil传递给另一个ViewController

  •  0
  • Platiplus  · 技术社区  · 8 年前

    经过一天的研究和尝试,我来帮助你。

    我有一个collectionView将图像传递给imageView,就像instagram(让你想象一下界面),我想我是在正确地执行segue,但在另一个viewController上它最终为零。

    我的代码如下:

    第一视图控制器>

        //  TakePhotoViewController.swift
    
        import UIKit
        import Photos
    
        class TakePhotoViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout {
    
            @IBOutlet weak var photoImageView: UIImageView!
    
    
        var imageArray = [UIImage]()
    
        override func viewDidLoad(){
            super.viewDidLoad()
            grabPhotos()
        }
    
        @IBAction func postPhotoTaken(_ sender: Any) {
            self.performSegue(withIdentifier: "photoPost", sender: self)
        }
    
    
        func grabPhotos(){
    
            let imgManager = PHImageManager.default()
            let requestOptions = PHImageRequestOptions()
    
            requestOptions.isSynchronous = true
            requestOptions.deliveryMode = .highQualityFormat
    
            let fetchOptions = PHFetchOptions()
            fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: true)]
    
            if let fetchResult: PHFetchResult = PHAsset.fetchAssets(with: .image, options: fetchOptions){
                if fetchResult.count > 0 {
                    for i in 0..<fetchResult.count{
                        imgManager.requestImage(for: fetchResult.object(at: i), targetSize: CGSize(width: 200, height: 200), contentMode: .aspectFill, options: requestOptions, resultHandler: {image, error in
    
                            self.imageArray.append(image!)
    
                        })
                    }
                }
    
                else {
                    print("You Don't Have Any Photos!")
                }
            }
    
        }
    
        func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
            return imageArray.count
        }
    
        func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
            let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath)
            let imageView = cell.viewWithTag(1) as! UIImageView
    
            imageView.image = imageArray[indexPath.row]
            return cell
        }
    
        func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
            photoImageView.image = imageArray[indexPath.row]
        }
    
        func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    
            let width = collectionView.frame.width / 3 - 1
    
            return CGSize(width: width, height: width)
        }
    
        func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
            return 1.0
        }
    
        func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
            return 1.0
        }
    
        override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
            if segue.identifier == "photoPost" {
    
                let photoPost = segue.destination as! PhotoPostTableViewController
    
                let imagePhoto = self.photoImageView.image
                photoPost.photo = imagePhoto!
            }
        }
    
    }
    

    第二视图控制器>

    //  photoPostViewController.swift
    
    import UIKit
    
    class PhotoPostTableViewController: UITableViewController {
    
        var photo: UIImage!
    
        @IBOutlet weak var newPhoto: UIImageView!
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            newPhoto.image = photo
            print(photo)
    
        }
    
        override func viewDidAppear(_ animated: Bool) {
            newPhoto.image = photo
            print(photo)
        }
    
    }
    

    你们能帮帮我吗?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Milan Nosáľ    8 年前

    基于以下事实: segue.identifier 在您的 prepare(for:) 返回nil,这意味着执行的序列由情节提要触发,而不是由 postPhotoTaken(_ sender: Any) .

    检查情节提要,找到从第一个VC到第二个VC并由按钮触发的序列,然后更改其 identifier "photoPost" .

    我相信之后你可以删除 后期照片处理(\uSender:Any) .