Я пытаюсь отобразить изображения в виде коллекции внутри табличного представления.
Я реализовал такие коды так
//Model
import UIKit
import Firebase struct Post { var key: String
var Date: String
var tweetImageUrl = [URL]()
var Text: String init(snapshot: DataSnapshot) { self.key = snapshot.key
self.Date = (snapshot.value as! NSDictionary)["Date"] as? String ?? ""
self.Text = (snapshot.value as! NSDictionary)["Text"] as? String ?? ""
if let urls = (snapshot.value as! NSDictionary)["tweetImageUrl"] as? [String:String] {
for (_,value) in urls {
if let finalUrl = URL(string: value) {
tweetImageUrl.append(finalUrl)
}
}
}
}
}//tableviewcell
import UIKitclass TimellineTableViewCell: UITableViewCell { @IBOutlet var profileImage: UIImageView!
@IBOutlet var tempoName: UILabel!
@IBOutlet var dateLabel: UILabel!
@IBOutlet var caption: UILabel!
@IBOutlet var collectionView: UICollectionView! var post: Post? {
didSet {
tempoName.text = "channing"
dateLabel.text = post?.Date
caption.text = post?.Text
profileImage.image = #imageLiteral(resourceName: "heart")
}
} override func awakeFromNib() {
super.awakeFromNib() collectionView.delegate = self
collectionView.dataSource = self
profileImage.layer.cornerRadius = 30.0
profileImage.layer.masksToBounds = true
}
}//classextension TimellineTableViewCell: UICollectionViewDelegate, UICollectionViewDataSource { func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
guard let count = post?.tweetImageUrl.count else { return 0 }
return count
} func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "timeLineCell", for: indexPath) as! TimelineCollectionViewCell cell.configCell(post: post) return cell
}
}//extension//collectionviewcell
import UIKitclass TimelineCollectionViewCell: UICollectionViewCell { @IBOutlet var imageView: UIImageView! override func awakeFromNib() {
super.awakeFromNib()
} func configCell(post: Post?) { guard let imageUrl = post?.tweetImageUrl else { return } for url in imageUrl { URLSession.shared.dataTask(with: url, completionHandler: { (data, res, err) in guard let data = data else { return }
let image = UIImage(data: data) DispatchQueue.main.async {
self.imageView.image = image
}
}).resume()
}
}
}//class//viewcontroller
import UIKit
import Firebaseclass TimelineViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { @IBOutlet var TimelinetableView: UITableView! var ref: DatabaseReference! {
return Database.database().reference()
}
let uid = Auth.auth().currentUser?.uid
var tweets = [Post]() override func viewDidLoad() {
super.viewDidLoad() self.TimelinetableView.rowHeight = UITableViewAutomaticDimension
self.TimelinetableView.estimatedRowHeight = 300
fetchTweets()
} func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 300
} func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return tweets.count
} func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = TimelinetableView.dequeueReusableCell(withIdentifier: "tableCell", for: indexPath) as! TimellineTableViewCell cell.post = tweets[indexPath.row] return cell
} func fetchTweets() {
ref.child("TWEETS").child(uid!).observe(.value, with: { (snapshot) in var result = [Post]()
for post in snapshot.children {
let post = Post(snapshot: post as! DataSnapshot)
result.append(post)
}
self.tweets = result.sorted(by: { (p1, p2) -> Bool in
p1.Date > p2.Date
})
self.TimelinetableView.reloadData()
}, withCancel: nil) }//func}//class
Но если я запустил его, симулятор будет выглядеть так
Если я выбрал одну из этих ячеек, компоненты будут отображаться, кроме изображения в представлении коллекции. Если ячейка не выбрана, симулятор выглядит как ячейка с надписью "Действительно весело". У кого-нибудь есть идеи, как это исправить?