#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. Почему для этого вам не нужно использовать обычный сегмент?