Ячейки не заполняются во втором представлении коллекции внутри таблицы

#swift #xcode #uitableview #uicollectionview #multiple-instances

#swift #xcode #uitableview #uicollectionview #несколько экземпляров

Вопрос:

Я новичок в кодировании, и я схожу с ума от своей текущей проблемы. У меня есть контроллер представления таблицы с 7 ячейками. У меня есть 4 представления коллекции в 7 ячейках. У меня есть метки в трех других. Я пытаюсь заставить мои первые два представления коллекции работать, чтобы я мог использовать тот же подход для добавления двух других. В настоящее время я могу заполнить только две ячейки моего первого представления коллекции (в ячейке 2). Я не знаю, как заполнить ячейки второго представления коллекции.

Вот код для контроллера представления таблицы:

 import UIKit

class HomeTableViewController: UITableViewController, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout {

@IBOutlet weak var t10MacInfCollectionView: UICollectionView!

@IBOutlet weak var t10MicroInfCollectionView: UICollectionView!

let T10Mac = "T10Mac"

let T10Mic = "T10Mic"

override func viewDidLoad() {
    super.viewDidLoad()
    
    t10MacInfCollectionView.delegate = self
    t10MicroInfCollectionView.delegate = self

    t10MacInfCollectionView.dataSource = self
    t10MicroInfCollectionView.dataSource = self

    self.view.addSubview(t10MicroInfCollectionView)
    self.view.addSubview(t10MicroInfCollectionView)

    t10MacInfCollectionView.reloadData()
    t10MicroInfCollectionView.reloadData()

}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    
    if collectionView == self.t10MacInfCollectionView {
        
        return 10
        
        }

        return 10
    }

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    
    if collectionView == self.t10MacInfCollectionView {
        
        let cellA = collectionView.dequeueReusableCell(withReuseIdentifier: T10Mac , for: indexPath) as! T10MacroCollectionViewCell
        
        return cellA
        
        }

    else {

        let cellB = collectionView.dequeueReusableCell(withReuseIdentifier: T10Mic , for: indexPath) as! T10MicroCollectionViewCell

        return cellB
            
        }

    }

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    
    if collectionView == self.t10MacInfCollectionView {
        
        return CGSize(width: 125.0, height: 225.0)
        
           }
    
    else {

            return CGSize(width: 125.0, height: 225.0)
        
               }
    }

override func numberOfSections(in tableView: UITableView) -> Int {
    // #warning Incomplete implementation, return the number of sections
    return 1
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete implementation, return the number of rows
    return 7
    }
}
  

Я буквально так расстроен. Если кто-нибудь может помочь, я буду очень благодарен. Спасибо, ребята, за помощь.

Комментарии:

1. При беглом взгляде я сразу вижу одну небольшую опечатку, которая, похоже, имеет большие последствия. В тот момент, когда вы добавляете CollectionViews в качестве подвида, вы добавляете один и тот же дважды вместо добавления каждого по одному разу.

2. Creeperspeak! Большое вам спасибо. Я изменил это, и в итоге некоторые из моих ячеек были удалены. В итоге я удалил addSubview, и это устранило мою проблему. Спасибо, что помогли мне найти решение!

Ответ №1:

В функции viewDidLoad(): удалить

 self.view.addSubview(t10MicroInfCollectionView)
self.view.addSubview(t10MicroInfCollectionView)
  

Теперь viewDid должен выглядеть так:

 override func viewDidLoad() {
super.viewDidLoad()

t10MacInfCollectionView.delegate = self
t10MicroInfCollectionView.delegate = self

t10MacInfCollectionView.dataSource = self
t10MicroInfCollectionView.dataSource = self

t10MacInfCollectionView.reloadData()
t10MicroInfCollectionView.reloadData()

}