Хотите отобразить данные ячейки коллекции, поступающие из API и находящиеся в файле XIB - PullRequest
0 голосов
/ 08 июля 2019

я создал xib ячейки табличного представления, в котором я взял представление коллекции, а для ячейки представления коллекции я создал еще одну xib, состоящую из значка и метки.В главном табличном представлении у меня есть другой раздел заголовка, такой как "ЕДА", "ПУТЕШЕСТВИЕ" и так далее.Это название также происходит от API, который я проанализировал, но данные внутри каждой категории не знают, как анализировать.ниже приведен снимок экрана моего приложения:

снимок экрана моего приложения

пример моего API-интерфейса того, чего я хочу достичь:

{
    "Result": [
        {
            "category_id": 1,
            "category_name": "FOOD",
            "created_date": "2019-07-06 12:16:17",
            "FOOD": [
                {
                    "card_id": 1,
                    "card_category": "1",
                    "card_name": "Fruits",
                    "card_icon": "0f6d3734f57a729e086090be3f5fbf67.jpeg",
                    "card_audio": "087976be634266a303bd65b8e3f250cc.mp3",
                    "card_status": "1",
                    "created_date": "2019-07-06 12:55:40",
                    "isFavorite": 0
                },
                {
                    "card_id": 2,
                    "card_category": "1",
                    "card_name": "Vegetables",
                    "card_icon": "403d14b91ad07f7f84442073cae56dcb.jpeg",
                    "card_audio": "cac38b7bd653d0a583015591fb637eda.mp3",
                    "card_status": "1",
                    "created_date": "2019-07-06 12:58:08",
                    "isFavorite": 1
                },

имя_каталога, которое я проанализировал, и оно отображается также в заголовке заголовка, но данные внутри "FOOD" не отображают

мой код контроллера homeview, где я взял tableview:

class HomeViewController: UIViewController, NavgationTransitionable{

    @IBOutlet weak var cardsTableView: UITableView!
    @IBOutlet weak var homeSearchBar: UISearchBar!

    var cardCategories = [ModelGetCardsResult]()

    var deckFood = [ModelFood]()
    var deckSports = [ModelSports]()
    var deckTravel = [ModelTravel]()
    var deckBasics = [ModelBasics]()
    var deckAdjectives = [ModelAdjectives]()
    var deckSchool = [ModelAtSchool]()
    var deckPhrases = [ModelCommonPhrases]()
    var deckSchedule = [ModelSchedule]()
    var deckVerbs = [ModelVerbs]()
    var deckDating = [ModelDating]()

override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.

        //register external nib
        self.cardsTableView.register(UINib(nibName: "CategoryRow", bundle: nil), forCellReuseIdentifier: "CategoryRow")
        self.cardsTableView.register(UINib(nibName: "HeaderView", bundle: nil), forCellReuseIdentifier: "headerView")

        let nc = NotificationCenter.default
        nc.addObserver(self, selector: #selector(self.pushToFlipCardVC), name: Notification.Name("myNoti"), object: nil)

        self.setupSearchBar()

        self.WS_GetCards()

    }
//Get_cards API Parsing

    func WS_GetCards() {

        if ApiUtillity.sharedInstance.isReachable() {

            ApiUtillity.sharedInstance.StartProgress(view: self.view)

            APIClient<ModelBaseGetCards>().API_GET(Url: WS_GetCardsAPI, Params: [:], Authentication: true, Progress: true, Alert: true, Offline: false, SuperVC: self, completionSuccess: { (modelResponse) in

                if(modelResponse.success == true) {

                    ApiUtillity.sharedInstance.StopProgress(view: self.view)

                    self.cardCategories.removeAll()
                    if let tempCardCategories = modelResponse.getCardsResult, tempCardCategories.count != 0 {

                        for card in tempCardCategories {
                            self.cardCategories.append(card)
                        }
                    }

                }else {
                    self.showToast(message: modelResponse.message!)
                     ApiUtillity.sharedInstance.StopProgress(view: self.view)
                }
                self.cardsTableView.reloadData()

            }) { (failed) in
                self.showToast(message: failed.localizedDescription)
                 ApiUtillity.sharedInstance.StopProgress(view: self.view)
            }
        }else {
            self.showToast(message: "No internet connection...")
        }
    }
}

extension HomeViewController: UITableViewDataSource, UITableViewDelegate{

    func numberOfSections(in tableView: UITableView) -> Int {
        return cardCategories.count
    }

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

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

        let cell = tableView.dequeueReusableCell(withIdentifier: "CategoryRow", for: indexPath) as! CategoryRow

        return cell
    }


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

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

    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let cell = tableView.dequeueReusableCell(withIdentifier: "headerView") as! HeaderView

        let cardCatObj = cardCategories[section].categoryName

        if let headerTitle = cardCatObj, headerTitle.count != 0 {
           cell.titleHeader.text = headerTitle
        }
        return cell
    }

    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {

       return 30
    }

    func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
        return 0
    }

}

myкод ячейки таблицы:

class CategoryRow: UITableViewCell {

    @IBOutlet weak var cardsCollView: UICollectionView!

    var deckImagesArr: [String] = [] //"checkmark", "phrases", "checkmark"
    var deckTitleArr: [String] = [] //"Saying Hello & Saying Hello", "Common Phrases", "Common Phrases"

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
        self.cardsCollView.register(UINib(nibName: "cardsCell", bundle: nil), forCellWithReuseIdentifier: "cardsCell")

    }
}

extension CategoryRow: UICollectionViewDataSource, UICollectionViewDelegate {
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cardsCell", for: indexPath as IndexPath) as! cardsCell
        cell.popularTitles.text = deckTitleArr[indexPath.item]
        cell.popularImage.image = UIImage(named: deckImagesArr[indexPath.item])

        return cell

    }

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

        return deckTitleArr.count
    }

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        let nc = NotificationCenter.default
        nc.post(name: Notification.Name("myNoti"), object: nil)
    }

}

extension CategoryRow: UICollectionViewDelegateFlowLayout {
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

        return CGSize(width: (UIScreen.main.bounds.width - 18) / 2, height: 114)
    }
}

ячейка моей коллекции:

class cardsCell: UICollectionViewCell {

    @IBOutlet weak var mainView: UIView!
    @IBOutlet weak var deckLock: UIButton!
    @IBOutlet weak var popularImage: UIImageView!
    @IBOutlet weak var popularTitles: UILabel!


    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code

        self.mainView.layer.cornerRadius = 6.0
        self.mainView.clipsToBounds = true
        self.mainView.layer.masksToBounds = false
        self.mainView.layer.borderWidth = 1.0
        self.mainView.layer.borderColor = UIColor(rgb: 0x1282F1).cgColor
    }

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