UICollectionView в UITableView - я хочу показать данные в CollectionVewCell - PullRequest
1 голос
/ 26 апреля 2019

Я хочу показать данные в UICollectionView. Который исходит из UITableView клетки. Моя главная проблема заключается в следующем. Я передаю ключ catgID из cellForRowAt в другом API и получаю данные из него. Но данные поступают неправильно.

Я передаю catgID из cellForRowAt и получаю другой API, который покажет список данных для UICollectionViewCells. Теперь данные поступают, но не должным образом.

  1. Это мой UITableView класс для tableview индекса.


import UIKit
import Reachability
import Alamofire


var arrayMenuProducts = [structMenuProducts]()
struct structMenuProducts {
    var id:Int
    var product_name:String
    var category:String
    var product_image:String
    var price:String
    var unit_price:Double
    var addons:NSArray
}


class MenuVC: UIViewController, UITableViewDelegate, UITableViewDataSource {

    var reachability = Reachability()!

    @IBOutlet weak var tableview: UITableView!


    var arrayMenuCat = [structMenuCat]()
    struct structMenuCat{
        var id:Int
        var category_name:String
    }

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


    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return arrayMenuCat.count
    }


    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        catgID = arrayMenuCat[indexPath.row].id

        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell1") as! MenuTableCell
        cell.lblCategoryTitle.text = arrayMenuCat[indexPath.row].category_name
        cell.collectionviewOne.reloadData()
//        let catid = arrayMenuCat[indexPath.row].id
//        print(catid)


        return cell
    }


    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 216
    }




    func menuVegAPI()
    {
        if (reachability.connection == .wifi) || (reachability.connection == .cellular)
        {
            arrayMenuCat.removeAll()
            SwiftLoader.show(animated: true)
            let url = BaseUrl + ViewController.sharedInstance.menuCategory
            print(url)

            Alamofire.request(url, method: .get, parameters: nil, encoding: URLEncoding.default).responseJSON { response in
                SwiftLoader.hide()
                switch response.result {
                case .success:
                    let json = response.result.value
                        print(json)

                    let code = (json as AnyObject).object(forKey: "code") as! Int
                    print(code)

                    if code == 200
                    {
                        let data = (json as AnyObject).object(forKey: "data") as? NSArray

                        for alldata in data!
                        {
                            let id = (alldata as AnyObject).object(forKey: "id") as! Int
                            let category_name = (alldata as AnyObject).object(forKey: "category_name") as! String
                            let arr = structMenuCat(id: id, category_name: category_name)
                            self.arrayMenuCat.append(arr)
//                            self.menuProductsAPI(categoryid: id)

                        }
                        self.tableview.reloadData()

                    }
                    else
                    {

                    }
                case .failure:
                    print("error")
                }
            }
        }
        else
        {
            alert(title: "", message: "Please Check Your Internet Connection")
        }

    }
}

  1. Это мой класс TableViewCell. В этом классе мне показывают данные по CollectionView. Его код здесь


import UIKit
import Alamofire
import Reachability

var catgID : Int!
var collectionreload : UICollectionView?

class MenuTableCell: UITableViewCell, UICollectionViewDataSource, UICollectionViewDelegate {


    var reachability = Reachability()!

    @IBOutlet weak var lblCategoryTitle: UILabel!
    @IBOutlet weak var collectionviewOne: UICollectionView!


    var arrayMenuProducts = [structMenuProducts]()
    struct structMenuProducts {
        var id:Int
        var product_name:String
        var category:String
        var product_image:String
        var price:String
        var unit_price:Double
        var addons:NSArray
    }


    override func awakeFromNib() {
        super.awakeFromNib()
        collectionreload = self.collectionviewOne
        print(arrayMenuProducts)
        print(catgID ?? 0)

        menuProductsAPI(categoryid: catgID!)
    }




    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }




    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

        return arrayMenuProducts.count
    }


    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CellRID", for: indexPath) as! MenuCollectionViewCell

        let abc = arrayMenuProducts[indexPath.row].product_name
            print(abc)

            //        if catgID == Int(arrayMenuProducts[indexPath.row].category)
            //        {
            cell.lblTitleForVeg.text = arrayMenuProducts[indexPath.row].product_name
            cell.lblForPriceVeg.text = "$\(arrayMenuProducts[indexPath.row].unit_price)"

    }


    func menuProductsAPI(categoryid:Int)
    {
        if (reachability.connection == .wifi) || (reachability.connection == .cellular)
        {
            SwiftLoader.show(animated: true)
            arrayMenuProducts.removeAll()
            let url = BaseUrl + ViewController.sharedInstance.menuProducts + "categoryid=\(categoryid)"
            print(url)

            Alamofire.request(url, method: .get, parameters: nil, encoding: JSONEncoding.default).responseJSON { response in

                switch response.result {
                case .success:
                    let json = response.result.value
                    print(json)
                    //                    self.tableview.reloadData()
                    let code = (json as AnyObject).object(forKey: "code") as! Int
                    print(code)

                    if code == 200
                    {
                        let data = (json as AnyObject).object(forKey: "data") as? NSArray

                        DispatchQueue.main.async {
                            for alldata in data!
                            {
                                let id = (alldata as AnyObject).object(forKey: "id") as! Int
                                let product_name = (alldata as AnyObject).object(forKey: "product_name") as! String
                                let category = (alldata as AnyObject).object(forKey: "category") as! String
                                let product_image = (alldata as AnyObject).object(forKey: "product_image") as! String
                                let price = (alldata as AnyObject).object(forKey: "price") as! String
                                let unit_price = (alldata as AnyObject).object(forKey: "unit_price") as! Double
                                let addons = (alldata as AnyObject).object(forKey: "addons") as? NSArray


                                let arr = structMenuProducts(id: id, product_name: product_name, category: category, product_image: product_image, price: price, unit_price: unit_price, addons: addons!)
                                self.arrayMenuProducts.append(arr)
                            }
                            self.collectionviewOne.reloadData()
                            SwiftLoader.hide()
                        }
                    }
                    else
                    {

                    }
                case .failure:
                    print("error")
                }
            }
        }
        else
        {
            //            alert(title: "", message: "Please Check Your Internet Connection")
        }

    }

}

Я хочу показать данные, поступающие в CollectionView в правильном формате. Если Tableview index == 0 и ID категории идет 10, то. Идентификатор категории 10 будет сначала один за другим в последовательности. Я хочу передать идентификатор категории. В моем случае ID категории не приходит в очередь.

1 Ответ

0 голосов
/ 26 апреля 2019

Обновите метод источника данных tableview как

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell1") as! MenuTableCell
        cell.lblCategoryTitle.text = arrayMenuCat[indexPath.row].category_name    
        cell.menuProductsAPI(categoryid: arrayMenuCat[indexPath.row].id)
        return cell
    }

И удалите menuProductsAPI(categoryid: catgID!) из awakeFromNib method

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...