Пытаюсь использовать unwindSegue и отправить информацию обратно в представление моей коллекции

#ios #swift #xcode #collectionview #unwind-segue

Вопрос:

Я застрял на этом довольно долго, и мне некуда обратиться за помощью в этом вопросе. В принципе, я хочу использовать a unwindSegue (если только я не смогу достичь своей цели другим путем) для отправки моей информации из представления таблицы (A) в представление коллекции (B), но я не знаю, чего мне не хватает. Мой код приведен ниже:

ПРЕДСТАВЛЕНИЕ ТАБЛИЦЫ (A):

 import UIKit

class EditBeerTableViewController: UITableViewController {

    
    @IBOutlet weak var nameTextField: UITextField!
    @IBOutlet weak var companyTextField: UITextField!
    @IBOutlet weak var countTextField: UITextField!
    @IBOutlet weak var purchasePriceTextField: UITextField!
    @IBOutlet weak var saveButton: UIBarButtonItem!
    
    var beer: Beer?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        if let beer = beer {
            nameTextField.text = beer.name
            companyTextField.text = beer.company
            countTextField.text = beer.count
            purchasePriceTextField.text = beer.purchasePrice
            
        }
        
        updateSaveButton()

    }


    func updateSaveButton() {
        let nameText = nameTextField.text ?? ""
        let companyText = companyTextField.text ?? ""
        let countText = countTextField.text ?? ""
        let purchasePriceText = purchasePriceTextField.text ?? ""
        saveButton.isEnabled = !nameText.isEmpty amp;amp; !companyText.isEmpty amp;amp; !countText.isEmpty amp;amp; !purchasePriceText.isEmpty
        
    }
    
    @IBAction func textEditingChanged(_ sender: UITextField) {
        updateSaveButton()
    }
    
    @IBAction func unwindToBeerCollectionView(for unwindSegue: UIStoryboardSegue) {
        print("Save Button Pressed")
    }
    @IBAction func saveButtonPressed(_ sender: Any) {
        print("Save Button Pressed")
        }
    override func prepare(for segue: UIStoryboardSegue, sender:
    Any?) {
        super.prepare(for: segue, sender: sender)

        guard segue.identifier == "saveUnwind" else { return }
        let name = nameTextField.text ?? ""
        let company = companyTextField.text ?? ""
        let count = countTextField.text ?? ""
        let purchasePrice = purchasePriceTextField.text ?? ""
        beer = Beer(name: name, company: company, count: count, purchasePrice: purchasePrice)
        
    }
    

 

КОНТРОЛЛЕР ВИДА (B):

 import UIKit

class BeerViewController: UIViewController {
    
    @IBOutlet weak var beerCollectionView: UICollectionView!
    @IBOutlet weak var beerHeightConstraint: NSLayoutConstraint!
    var beers: [Beer] = [
        Beer(name: "Budweiser", company: "Budweiser", count: "10", purchasePrice: "1.50"),
        Beer(name: "Budlight", company: "Budlight", count: "16", purchasePrice: "1.00"),
        Beer(name: "Tangerine Wheat", company: "Lost Coast", count: "4", purchasePrice: "2.25"),
        Beer(name: "Coors Light", company: "Coors", count: "150", purchasePrice: "1.00"),
        Beer(name: "Kokanee", company: "Kokanee", count: "13", purchasePrice: "1.00")
    ]

    override func viewDidLoad() {
        super.viewDidLoad()
        beerCollectionView.dataSource = self
        beerCollectionView.delegate = self
        
        }
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        beerCollectionView.dataSource = self
        beerCollectionView.delegate = self
        
    }
    override func viewDidLayoutSubviews() {
       super.viewDidLayoutSubviews()
   }

    @IBAction func unwindToBeerCollectionView(for unwindSegue: UIStoryboardSegue) {
        
        
    }
 
    }



    extension BeerViewController: UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {
        func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
            if collectionView == beerCollectionView {
                self.performSegue(withIdentifier: "BeerEdit", sender: nil)
            } else {
                
            }
            if let cell = collectionView.cellForItem(at: indexPath) {
                cell.contentView.backgroundColor = #colorLiteral(red: 1, green: 0.4932718873, blue: 0.4739984274, alpha: 1)
            }
        }
        

        func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) {
            if let cell = collectionView.cellForItem(at: indexPath) {
                cell.contentView.backgroundColor = nil
            }
        }

        func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
            return beers.count
        }
        
        func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
            let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "BeerCardCell", for: indexPath) as! BeerCollectionViewCell
            let beer = beers[indexPath.row]
            cell.update(with: beer)
            print(beer.name)
            return cell
        }
        func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
            let width = collectionView.bounds.width
            let height = width / 2.25
            return CGSize(width: width, height: height)
        }
        
        override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
            if segue.identifier == "BeerEdit" {
                let indexPath = beerCollectionView.indexPathsForSelectedItems?.first
                let beer = beers[indexPath!.row]
                    let navController = segue.destination as!
                       UINavigationController
                    let editBeerTableViewController =
                       navController.topViewController as!
                       EditBeerTableViewController
                
                    editBeerTableViewController.beer = beer
                }
            
        }
 
        
    }

 

Комментарии:

1. Почему для этого вам не нужно использовать обычный сегмент?