2017-11-11 12 views
0

私はUICollectionViewCellにUIButtonを持っています。このセルからjson idを取得したいUICollectionViewControllerのjsonデータを完全に解析します。 UICollectionViewCellでUIButtonをクリックすると、いつもエンドIDで問題が発生しています。 UICollectionViewController、UICollectionViewDelegateFlowLayout {Swift:UIButton CollectionViewセルからjson idを呼び出す方法

:ここ

は私のコード

JSON

{ 
    "error": false, 
    "product_sellers": [ 
    { 
     "id": 5, 
     "store_name": "ahmedstore", 
     "photo": "user_12-06-2017-12-32-56.png", 
     "is_favorite": 0 
    }, 
    { 
     "id": 122, 
     "store_name": "aitldev6", 
     "photo": null, 
     "is_favorite": 0 
    }, 
    { 
     "id": 123, 
     "store_name": "aitlmanager", 
     "photo": "user_2017-08-31-10-06-am (16).jpg", 
     "is_favorite": 0 
    }, 
    { 
     "id": 135, 
     "store_name": "ajanta library", 
     "photo": "user_2017-08-19-7-16-am23931.png", 
     "is_favorite": 0 
    }, 

CollectionViewController

クラスProductStoreCollectionViewControllerです

override func viewDidLoad() { 

    super.viewDidLoad() 


    let url = URL(string: "..........") 


    URLSession.shared.dataTask(with:url!) { (urlContent, response, error) in 

     if error != nil { 
      print(error ?? 0) 
     } 
     else { 
      do { 

       let items = json["product_sellers"] as? [[String: Any]] ?? [] 

       self.arrStore = [Store]() 

       for item in items { 


        let oStore = Store() 

        oStore.id = item["id"] as? Int 
        oStore.image = item["photo"] as? String 
        oStore.store_name = item["store_name"] as? String 
        oStore.is_favorite = item["is_favorite"] as? Int 

        ProductStoreId.store_id = oStore.id! 

        self.arrStore.append(oStore) 

       } 

      } catch let error as NSError { 
       print(error) 
      } 

      DispatchQueue.main.async(execute: { 

       self.collectionView?.reloadData() 
      }) 

     } 



    }) 

}

UICollectionViewCell

class StoreCollectionViewCell: BaseCell{ 



    let heartBtn: UIButton = { 

     let btn = UIButton() 
     btn.setImage(UIImage(named: "heart_white_copy"), for: .normal) 

     btn.translatesAutoresizingMaskIntoConstraints = false 
     return btn 
    }() 

    var sellerId2: Int = 1 


    func heartBtnClick(){ 

     print("box Btn click") 


     self.sellerId2 = ProductStoreId.store_id 


     print("add to favoriteStore\(self.sellerId2)") 


    } 


    override func setupCell() { 

     heartBtn.addTarget(self, action: #selector(heartBtnClick), for: .touchUpInside) 
     addSubview(heartBtn) 




    } 

} 
+0

に適切にコードを追加してもcollectionviewメソッドを追加してくださいする必要があります。 – ivarun

答えて

2

ProductStoreId.store_idは、あなたがそれを解析している間に格納された最後のIDを持っているからです。

あなたのデータソース方式

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
    // Your code 
    let store = self.arrStore[indexPath.row] // Please correct it if not 
    cell.sellerId2 = store.id 
} 

にIDを割り当て、あなたのStoreCollectionViewCellクラス

func heartBtnClick(){ 
    print("box Btn click") 
    //We don't need the below line 
    //self.sellerId2 = ProductStoreId.store_id 
    print("add to favoriteStore\(self.sellerId2)") 
} 
+0

お返事ありがとうございます。私の問題は解決します – Minzu

+0

私はこの質問に答えるのを助けることができますか?私は、ボタンをクリックしてtableviewセル内の1つのボタンを検出したい。リンクはhttps://stackoverflow.com/questions/48970198/how-to-detect-one-button-in-tableview-cell?noredirect=1#comment84948065_48970198です。 – Minzu