下面我試圖將數據加載到UITableView中,並且每次數據都在錯誤的單元格中結束,或者複製到應該永遠不會訪問的單元格中。我已經刪除了很多額外的代碼,並且仍然遇到這個問題。我想我缺少一些有關UITableViews的基礎知識。UITableView將數據加載到錯誤的單元格中
func setUpFeedTable() {
self.tableFeed.isScrollEnabled = true
for i in 0 ..< allDictionary.count {
let dictionary = allDictionary[i]
if dictionary?["type"]! != nil {
let l = i
print("text", l)
self.tableFeed.cellForRow(at: IndexPath(row: l, section: 0))?.imageView?.layer.borderColor = UIColor.black.cgColor
self.tableFeed.cellForRow(at: IndexPath(row: l, section: 0))?.imageView?.layer.borderWidth = 1
self.tableFeed.cellForRow(at: IndexPath(row: l, section: 0))?.imageView?.layer.cornerRadius = 1
//self.tableFeed.cellForRow(at: IndexPath(row: i, section: 0))?.imageView?.clipsToBounds = true
self.editProfileButton.imageView?.contentMode = UIViewContentMode.scaleAspectFill
//self.tableFeed.reloadData()
//self.tableFeed.reloadRows(at: [IndexPath(row: l, section: 0)], with: UITableViewRowAnimation(rawValue: 0)!)
self.tableFeed.cellForRow(at: IndexPath(row: l, section: 0))?.imageView?.frame = CGRect(x: 0, y: UIScreen.main.bounds.height/2, width: 100, height: 100)
self.tableTextOverLays(i: l, type: Int((dictionary?["type"])! as! NSNumber))
//self.tableFeed.reloadRows(at: [IndexPath(row: l, section: 0)], with: UITableViewRowAnimation(rawValue: 0)!)
self.tableFeed.reloadDate()
}
else if (dictionary?["type_"] as! String) == "Image" {
print("image", i)
}
else {
print("video")
}
}
}
func tableTextOverLays(i: Int, type: Int){
if type == 0{
print("saw type 0", i)
self.tableFeed.cellForRow(at: IndexPath(row: i, section: 0))?.imageView?.image = #imageLiteral(resourceName: "Geo-fence-50")
}
else if type == 1 {
self.tableFeed.cellForRow(at: IndexPath(row: i, section: 0))?.imageView?.image = #imageLiteral(resourceName: "Happy-50")
}
else if type == 2 {
self.tableFeed.cellForRow(at: IndexPath(row: i, section: 0))?.imageView?.image = #imageLiteral(resourceName: "Information-50")
}
else if type == 3 {
self.tableFeed.cellForRow(at: IndexPath(row: i, section: 0))?.imageView?.image = #imageLiteral(resourceName: "Home-50")
}
}
更新:我已經編輯我的代碼,事情正在努力更好(所以謝謝!),但我現在遇到了一個圖像是地方的問題都到前兩個單元格,然後第4和第第5個細胞。
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if tableView == self.table {
return users2.count
}
else {
//print("married barry", tableFeedCount)
return tableFeedCount
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if tableView == self.table {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath as IndexPath) as UITableViewCell
cell.textLabel?.text = self.users2[indexPath.row].name
return cell
}
else {
//print("working?")
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath as IndexPath) as UITableViewCell
let dictionary = allDictionary[indexPath.row]
if dictionary?["type"]! != nil {
cell.imageView?.layer.borderColor = UIColor.black.cgColor
cell.layer.borderWidth = 1
cell.imageView?.layer.cornerRadius = 1
cell.imageView?.frame = CGRect(x: 0, y: UIScreen.main.bounds.height/2, width: 100, height: 100)
self.tableTextOverLays(i: indexPath.row, type: Int((dictionary?["type"])! as! NSNumber), cell: cell)
}
else if (dictionary?["type_"] as! String) == "Image" {
print("image")
}
else {
print("video")
}
return cell
}
}
信息數組有沒有你是不是想充分利用'tableViewDataSource'協議的具體原因是什麼? – AgRizzo
是的,你正在使用錯誤的方法。 'cellForRowAtIndexPath:'返回已經存在於請求索引處的已格式化的單元格。單元格是啞元容器,當您在列表中滾動時會重新使用/重新填充,因此您無法像這樣單獨設置屬性。初始單元格格式發生在'dequeueReusableCell ...'這裏,您可以設置標籤,圖像,單元格類型。它爲'dataSource'中的每個索引創建單元格;沒有循環req'd。 頁眉/頁腳單元格也使用單獨的方法。建議查看關於如何使用UITableView的教程,創建自定義的UITableViewCell子類等。 – mc01