Xcodeでコレクションビューから詳細ビューにデータを渡すことができません

アンドリュー・タズソン

私はSwiftの初心者で、コレクションビューのセルに含まれている製品の対応する名前と画像を渡そうとしています。インターネットからこの情報を取得することをシミュレートするために、シングルトンとデータファイルを作成しました。コレクションビューセルの値を詳細ビューコントローラーのアウトレットに割り当てるのに苦労しています。どこが間違っているのですか?これらの値を正しく割り当てる方法を理解するのに苦労しています。これが私のファイルです:

コレクションビューファイル

import UIKit

class ProductVC: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource {

@IBOutlet weak var collectionView: UICollectionView!

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

@IBAction func backButtonPressed(_ sender: Any) {
    dismiss(animated: true, completion: nil)
}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return DataServices.instance.getProducts().count
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ProductCell", for: indexPath) as? ProductCell {
        let product = DataServices.instance.getProducts()[indexPath.row]
        cell.updateView(product: product)
        return cell
    }
    return ProductCell()
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "ProductDetailVC" {
        var productDetailVC = segue.destination as! ProductDetailVC
        let cell = sender as! UICollectionViewCell
        let indexPath = collectionView.indexPath(for: cell)
        let product = DataServices.instance.getProducts()[(indexPath?.row)!]
    }
}


}

製品詳細ビューコントローラー

import UIKit

class ProductDetailVC: UIViewController {

@IBOutlet weak var productName: UILabel!
@IBOutlet weak var productImageView: UIImageView!

var product: Product?

override func viewDidLoad() {
    super.viewDidLoad()
}

func updateView() {
    productName.text = product?.name
    productImageView.image = UIImage(named: (product?.imageName)!)
}


}

製品モデル

import Foundation

struct Product {

private(set) public var name: String
private(set) public var imageName: String

init(name: String, imageName: String) {
    self.name = name
    self.imageName = imageName
}

}

データ・モデル

import Foundation

class DataServices {

static var instance = DataServices()
var productIndex = 0 

private(set) public var categories = [
    Category(imageName: "backpackingBG", title: "BACKPACKING"),
    Category(imageName: "campingBG", title: "CAMPING"),
    Category(imageName: "divingBG", title: "DIVING"),
    Category(imageName: "fishingBG", title: "FISHING"),
    Category(imageName: "hikingBG", title: "HIKING"),
    Category(imageName: "rvBG", title: "RV LIFE")
]

func getCategories() -> [Category] {
    return categories
}

private let products = [
    Product(name: "SLEEPING BAG", imageName: "sleepingBag"),
    Product(name: "CAMPING STOVE", imageName: "campingStove"),
    Product(name: "FOOD COOLER", imageName: "foodCooler"),
    Product(name: "PARACORD BRACELET", imageName: "paracordBracelet"),
    Product(name: "PUP TENT", imageName: "pupTent"),
    Product(name: "TACTICAL KNIFE", imageName: "tacticalKnife")
]

func getProducts() -> [Product] {
    return products
}

}
vp2698

パスのproductために、パスするのを忘れましたproduct

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "ProductDetailVC" {
        var productDetailVC = segue.destination as! ProductDetailVC
        let cell = sender as! UICollectionViewCell
        let indexPath = collectionView.indexPath(for: cell)
        let product = DataServices.instance.getProducts()[(indexPath?.row)!]
        productDetailVC.product = product
    }
}

そして、ProductDetailVCUIの更新のために

override func viewDidLoad() {
    super.viewDidLoad()
    self.updateView()
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

アクションからレデューサーにデータを渡すことができません

分類Dev

ビューからコントローラーにデータを渡すことができません

分類Dev

コントローラーからプレイフレームワークのビューにリストを渡すことができません

分類Dev

codeigniterコントローラーからビューに変数を渡すことができませんか?

分類Dev

値を追加してコレクションビューに表示することができません

分類Dev

コマンドを介してビューからビューモデルに値を渡すことができませんでした

分類Dev

テーブルビューから詳細ビューにデータを渡すときに詳細ビューが更新されない

分類Dev

コンポーネントからサービスにデータを渡すことができません

分類Dev

迅速な3でモデルクラスからテーブルビューにデータを渡すことができませんか?

分類Dev

ビューでデータを渡すことができません (laravel 4)

分類Dev

NoReverseMatch:テンプレートからビューにパラメーターを渡すことができません。

分類Dev

Codenameone:シミュレーターからサービスを呼び出すことができません

分類Dev

Angular NGRXは、アクションを効果からディスパッチするときに、データをレデューサーに渡すことができません。エラーが発生しました-TypeError:フリーズできません

分類Dev

UI にコレクション ビューを表示しようとしましたが、表示できません。

分類Dev

あるアクティビティから別のアクティビティにデータを渡すことはできますが、アプリケーションがクラッシュします

分類Dev

データベースの結果をCodeigniterのビューに渡すことができません

分類Dev

Laravel:ルーターからビューへのデータベースから配列を渡すことができません

分類Dev

Laravel CRUD destroy メソッドが機能しない。データを削除するためにビューからコントローラーにデータを渡すことはできません

分類Dev

plistからsegueでデータを渡す。テーブルビューから詳細ビュー

分類Dev

ディスクアービトレーションフレームワークを使用するときに、ボリュームがタイムマシンボリュームであることを知る信頼できる方法はありますか?

分類Dev

Androidのテキストビューにデータ結果を渡すことができません

分類Dev

セル内のコレクションビューでデータが混乱することがあります

分類Dev

heightAnchorが原因で、コレクションビューを垂直方向にスクロールできません

分類Dev

デリゲートが機能していない状態で、詳細ビューからマスタービューにデータを渡す

分類Dev

ビューからコントローラーアクション.NET MVCにデータを送信できません

分類Dev

マスターから詳細ビューコントローラーにデータを渡す適切な方法は何ですか?

分類Dev

Xcodeはプロジェクトをビルドできますが、シミュレーターで実行することはできません

分類Dev

Laravel:編集ビューでフィールドにデータを入力しようとしているときに、プロパティ[名前]がこのコレクションインスタンスに存在しません

分類Dev

オプション値がnilであるため、詳細ビューでレルムデータベースオブジェクトのプロパティを設定できません

Related 関連記事

  1. 1

    アクションからレデューサーにデータを渡すことができません

  2. 2

    ビューからコントローラーにデータを渡すことができません

  3. 3

    コントローラーからプレイフレームワークのビューにリストを渡すことができません

  4. 4

    codeigniterコントローラーからビューに変数を渡すことができませんか?

  5. 5

    値を追加してコレクションビューに表示することができません

  6. 6

    コマンドを介してビューからビューモデルに値を渡すことができませんでした

  7. 7

    テーブルビューから詳細ビューにデータを渡すときに詳細ビューが更新されない

  8. 8

    コンポーネントからサービスにデータを渡すことができません

  9. 9

    迅速な3でモデルクラスからテーブルビューにデータを渡すことができませんか?

  10. 10

    ビューでデータを渡すことができません (laravel 4)

  11. 11

    NoReverseMatch:テンプレートからビューにパラメーターを渡すことができません。

  12. 12

    Codenameone:シミュレーターからサービスを呼び出すことができません

  13. 13

    Angular NGRXは、アクションを効果からディスパッチするときに、データをレデューサーに渡すことができません。エラーが発生しました-TypeError:フリーズできません

  14. 14

    UI にコレクション ビューを表示しようとしましたが、表示できません。

  15. 15

    あるアクティビティから別のアクティビティにデータを渡すことはできますが、アプリケーションがクラッシュします

  16. 16

    データベースの結果をCodeigniterのビューに渡すことができません

  17. 17

    Laravel:ルーターからビューへのデータベースから配列を渡すことができません

  18. 18

    Laravel CRUD destroy メソッドが機能しない。データを削除するためにビューからコントローラーにデータを渡すことはできません

  19. 19

    plistからsegueでデータを渡す。テーブルビューから詳細ビュー

  20. 20

    ディスクアービトレーションフレームワークを使用するときに、ボリュームがタイムマシンボリュームであることを知る信頼できる方法はありますか?

  21. 21

    Androidのテキストビューにデータ結果を渡すことができません

  22. 22

    セル内のコレクションビューでデータが混乱することがあります

  23. 23

    heightAnchorが原因で、コレクションビューを垂直方向にスクロールできません

  24. 24

    デリゲートが機能していない状態で、詳細ビューからマスタービューにデータを渡す

  25. 25

    ビューからコントローラーアクション.NET MVCにデータを送信できません

  26. 26

    マスターから詳細ビューコントローラーにデータを渡す適切な方法は何ですか?

  27. 27

    Xcodeはプロジェクトをビルドできますが、シミュレーターで実行することはできません

  28. 28

    Laravel:編集ビューでフィールドにデータを入力しようとしているときに、プロパティ[名前]がこのコレクションインスタンスに存在しません

  29. 29

    オプション値がnilであるため、詳細ビューでレルムデータベースオブジェクトのプロパティを設定できません

ホットタグ

アーカイブ