#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()
}