Ich habe derzeit eine Tabellenansicht mit einer uicollectionview innerhalb der Zellen, die geladen werden. Ich habe gerade zwei Probleme mit Tableview-Zellen.Paar Probleme mit TableViewCell
1) Die erste Zelle in der Tabellenansicht soll einen violetten Hintergrund haben, aber sie erscheint bei der anfänglichen Belastung weiß. Ich habe versucht, den Code in den Initialisierer zu setzen, aber das macht alle Zellen als Zelle 0 geladen und somit wird jede Zelle violett; nur wenn ich sie in die draw() Funktion setze, zeichnen sie richtig, mit Ausnahme der ersten Zelle.
2) Ich habe ein Problem mit den Zellen falsch neuladen, wenn sie aus dem Bildschirm gehen, was passieren wird, wenn die Zellen in die que gelegt werden, es vermasselt was der Inhalt der Zellen ist und immer neu zeichnen; Ich habe versucht, die collectionView-Datenquelle zu löschen und neu zu laden, aber ich kann es anscheinend nicht richtig machen; Ich will nur nicht, dass die Zellen in den falschen Zellen neu gezeichnet werden; Mit anderen Worten, in der ersten Zelle, die ausschließlich violett sein soll, erscheint in der Zelle ein Sammlungsansicht, nachdem sie vom Bildschirm verschwunden ist. Ich benutze PrepareForReuse, habe aber kein Glück, die Collectionsview zu löschen. Hier
ist der Tableview-Code für die cellForItem:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = self.tableView.dequeueReusableCell(withIdentifier: "MyCell", for: indexPath as IndexPath) as! DiscoverTVC
print("The index path is \(indexPath.row)")
cell.indexPathNum = indexPath.row
return cell
}
Hier ist mein customCell selbst:
import UIKit
class DiscoverTVC: UITableViewCell, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout {
var hasLoaded = false
var collectionView : UICollectionView!
var cellId = "Cell"
var index = 0
var indexPathNum = 0
override func prepareForReuse() {
super.prepareForReuse()
collectionView.dataSource = self
collectionView.reloadData()
}
override func draw(_ rect: CGRect) {
print(indexPathNum)
/** Setting up labels in each TableView Cell **/
let cellLabelHeader = UILabel()
/** Collection View within the Tableview **/
let flowLayout : UICollectionViewFlowLayout = UICollectionViewFlowLayout()
flowLayout.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
flowLayout.scrollDirection = .horizontal
/** The Indexing of cells within the TableView **/
if indexPathNum == 0 {
self.backgroundColor = UIColor.purple
} else
if ((indexPathNum == 1) || (indexPathNum == 3)) {
/** Setting up the Collection View within the Tableviews **/
self.collectionView = UICollectionView(frame: CGRect(x: self.bounds.width * 0, y: self.bounds.height/3, width: self.bounds.width, height: self.bounds.height/1.8), collectionViewLayout: flowLayout)
collectionView.register(DiscoverCVC.self, forCellWithReuseIdentifier: cellId)
collectionView.delegate = self
collectionView.dataSource = self
collectionView.backgroundColor = UIColor.clear
self.addSubview(collectionView)
index = indexPathNum
} else
if ((indexPathNum == 2) || (indexPathNum == 4)) {
/** Setting up the Collection View within the Tableviews **/
self.collectionView = UICollectionView(frame: CGRect(x: self.bounds.width * 0, y: self.bounds.height/8.5, width: self.bounds.width, height: self.bounds.height/1.15), collectionViewLayout: flowLayout)
collectionView.register(DiscoverCVC.self, forCellWithReuseIdentifier: cellId)
collectionView.delegate = self
collectionView.dataSource = self
collectionView.backgroundColor = UIColor.clear
self.addSubview(collectionView)
index = indexPathNum
}
}
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
}
/** Collection View Overloads **/
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 10
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
{
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as! DiscoverCVC
cell.backgroundColor = UIColor.clear
return cell
}
var width : CGFloat = 0
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
if index == 1 || index == 3 {
width = (collectionView.bounds.height)
} else {
width = (collectionView.bounds.height)/4
}
return CGSize(width:width, height:width)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
fatalError("init(coder:) has not been implemented")
}
}
Wenn die Zelle losgeht Bildschirm & ich zu ihm zurückkehren, um die App stürzt ab und sagt es unerwartetes gefunden Null bei: collectionView.dataSource = self
Ich will nicht hart klingen ... Sie haben zu viel schief geht es hier zu adressieren. Also - finde und durchlebe einige Tutorials, in denen du einfache Zellen, dann komplexe Zellen verwendest und dann Zellen wie deine über Code anstelle von Storyboard-Prototypen usw. erstellst. Dann fang an, alles zusammenzusetzen. ** Währenddessen ... ** Wenn Sie auf ein Tutorial stoßen, das Ihnen sagt, dass Sie Subview() * inside * 'override func draw (_rect: CGRect) instanziieren und hinzufügen sollen' '? Gehe niemals zurück auf diese Website. – DonMag
Verfügen Sie über Ressourcen, mit denen ich arbeiten/forschen kann? – AndrewS