首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我想将数据从一个VC传递到另一个VC

我想将数据从一个VC传递到另一个VC
EN

Stack Overflow用户
提问于 2018-07-31 03:15:23
回答 1查看 97关注 0票数 -1

我想把数据从一个VC传递到另一个VC,这是我的代码。

我在运行程序时遇到错误。你能告诉我我哪里做错了吗?

代码语言:javascript
复制
//
//  ViewController.swift
//  ContactPro
//
//  Created by raj on 30/09/2016.
//  Copyright © 2016. All rights reserved.
//

import UIKit

// Array declaration.
var contactsArray = [Contact]()

// CollectionView Protocols
class ViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource{
    // IBOutlets
    @IBOutlet weak var nameLabel: UILabel!
    @IBOutlet weak var button: UIButton!
    @IBOutlet weak var phoneLabel: UILabel!
    @IBOutlet weak var contactImgView: UIImageView!
    @IBOutlet weak var collectionView: UICollectionView!

    var selectedIndexPath : IndexPath?

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        // Getting the data back from the UserDefaults.
        let unarchivedData = UserDefaults.standard.object(forKey: "contacts") as? Data

        if let unarchivedData = unarchivedData
        {
            contactsArray = NSKeyedUnarchiver.unarchiveObject(with: unarchivedData) as! [Contact]

            // Unarchiving the data and passing it to the appropriate textFields.
            if contactsArray.count > 0
            {
                let singleContact = contactsArray[0]
                nameLabel.text = singleContact.name
                phoneLabel.text = singleContact.phone

                let imagepath = imagePath(imageName: singleContact.imageName)
                let image = UIImage(contentsOfFile: imagepath.path)

                contactImgView.image = image
            }

            collectionView.reloadData()
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        collectionView.delegate = self
        collectionView.dataSource = self

        rounded(view: contactImgView, radius: 110)
        rounded(view: button, radius: 110)
    }

    // MARK: - CollectionView Methods.
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return contactsArray.count
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "contactCell", for: indexPath)

        let imgView = cell.viewWithTag(10) as! UIImageView

        let contact = contactsArray[indexPath.row]
        let imageName = contact.imageName

        let imagepath = imagePath(imageName: imageName)
        let image = UIImage(contentsOfFile: imagepath.path)
        imgView.image = image

        rounded(view: imgView, radius: 50)
        imgView.layer.borderColor = UIColor.white.cgColor

        return cell
    }

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        let contact = contactsArray[indexPath.row]
        let imageName = contact.imageName
        let phone = contact.phone
        let name = contact.name

        let imagepath = imagePath(imageName: imageName)
        let image = UIImage(contentsOfFile: imagepath.path)

        nameLabel.text = name.uppercased()
        phoneLabel.text = phone
        contactImgView.image = image

        self.selectedIndexPath = indexPath
    }

    // Appending image to the Document Path.
    func imagePath(imageName: String) -> URL
    {
        let urlPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
        let directory = urlPath[0]
        let imagePath = directory.appendingPathComponent(imageName)

        return imagePath
    }

    // Making the view rounded.
    func rounded(view: UIView, radius: CGFloat)
    {
        view.layer.cornerRadius = radius
        view.layer.borderColor = UIColor(red:0.27, green:0.69, blue:0.60, alpha:1.00).cgColor
        view.layer.borderWidth = 3
        view.clipsToBounds = true
    }

    @IBAction func deleteAction(_ sender: Any) {
        let alert = UIAlertController(title: "ALERT!",
                                      message: "Image Will get deleted.",
                                      preferredStyle: UIAlertControllerStyle.alert)

        let Action1 = UIAlertAction(title: "OK", style: UIAlertActionStyle.destructive) { (action) in
            if let indexPath = self.selectedIndexPath{
                contactsArray.remove(at: indexPath.item)
                self.collectionView?.deleteItems(at: [indexPath])
                self.nameLabel.text = ""
                self.phoneLabel.text = ""
                self.contactImgView.image = nil
            }
        }

        let Action2 = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.default) { (action) in
        }

        alert.addAction(Action1)
        alert.addAction(Action2)

        self.present(alert, animated: true, completion: nil)
    }

    @IBAction func buttonCliicked(_ sender: Any) {
        self.performSegue(withIdentifier: "editSegue", sender: self)
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "editSegue"{
            let destinationVC = segue.destination as! EditVC {
                destinationVC.selectedContactIndex = IndexPath.row
            }
        }
    }
}

//
//  EditVC.swift
//  ContactPro
//
//  Created by raj on 7/30/18.
//  Copyright © 2018 . All rights reserved.
//

import UIKit

class EditVC: UIViewController {
    @IBOutlet weak var imageView: UIImageView!
    @IBOutlet weak var name: UITextField!
    @IBOutlet weak var phoneNumber: UITextField!

    var selectedContactIndex : Int = 0

    override func viewDidLoad() {
        super.viewDidLoad()
        self.title = "Edit data"

        let imageView = view.viewWithTag(8) as! UIImageView
        let image =  contactsArray [selectedContactIndex]

        let name = view.viewWithTag(9) as! UITextView
        name.text = contactsArray  [selectedContactIndex]

        let phoneNumber = view.viewWithTag(10) as! UITextView
        phoneNumber.text = contactsArray  [selectedContactIndex]
    }

    @IBAction func Save(_ sender: Any) {
    }
}
EN

回答 1

Stack Overflow用户

发布于 2018-07-31 04:14:43

试试这个,看看它是否能解决这个问题。"selectedContactIndex“必须是目标控制器中的变量。

代码语言:javascript
复制
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "editSegue" {
            if let destinationVC = segue.destination as? EditVC {
                destinationVC.selectedContactIndex = IndexPath.row
    }
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51600831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档