Ios SWIFT:将定义了tableView的ViewController中的数据传送到tableViewCell
我在viewController中以编程方式实现了tableView:Ios SWIFT:将定义了tableView的ViewController中的数据传送到tableViewCell,ios,swift,uitableview,tvos,uitableviewdiffabledatasource,Ios,Swift,Uitableview,Tvos,Uitableviewdiffabledatasource,我在viewController中以编程方式实现了tableView: class MoviesViewController5: UIViewController { let tableView = UITableView() // There's a code responsible for populating this array var moviesItemsArray = [[movieItem]]() var sectionsDat
class MoviesViewController5: UIViewController {
let tableView = UITableView()
// There's a code responsible for populating this array
var moviesItemsArray = [[movieItem]]()
var sectionsData:[[String:Any]]?
let cellIdentifier = "movieCardCell"
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
tableView.register(sectionTableCell2.self, forCellReuseIdentifier: "tableViewCell")
displayTableView2()
}
func displayTableView2() {
self.view.addSubview(tableView)
tableView.translatesAutoresizingMaskIntoConstraints = false
tableView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
tableView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
tableView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
}
}
extension MoviesViewController5: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, canFocusRowAt indexPath: IndexPath) -> Bool {
return false
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 20
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell =
tableView.dequeueReusableCell(withIdentifier: "tableViewCell", for: indexPath) as? sectionTableCell2
else {
fatalError("Unable to create explore table view cell")}
return cell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 140
}
}
tableViewCell也以编程方式实现:
class TableViewCell3: UITableViewCell {
var moviesItems: [movieItem] = []
let cellIdentifier = "movieCardCell"
var collectionViewTest:UICollectionView = UICollectionView(frame: CGRect.zero, collectionViewLayout: UICollectionViewFlowLayout())
fileprivate let cellOffset: CGFloat = 50
func setupCollectionView() {
collectionViewTest.delegate = self
// TODO: Should I communicate moviesItems to TableViewCell3 or set the dataSource to MoviesViewController 5
collectionViewTest.dataSource = self
}
}
// Trying to display only one collectionView in tableCell
extension TableViewCell3: UICollectionViewDelegate, UICollectionViewDataSource {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return moviesItems.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier:
cellIdentifier, for: indexPath) as! movieCardCell
cell.movieImageView.sd_setImage(with: URL(string: moviesItems[indexPath.item].imageURL))
return cell
}
}
我想要实现的内容:
moviesItemsArray
内部MoviesViewController5
moviesItemsArray
的每个moviesItems
传达给每个对应的TableViewCell3
TableViewCell3
collectionViewTest
问题(步骤2):我不知道如何根据索引将
moviesItemsArray的每个moviesItems
传达给每个对应的TableViewCell3
。
注意:其他步骤已经完成
问题:我应该像在SWIFT中进行不同类之间的通信一样进行数据通信,还是需要在
TableViewCell3
问题是如何将信息传递给tableViewCell 这就是cellForRowAt的作用。您的实现当前实际上是空的:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "tableViewCell", for: indexPath) as? sectionTableCell2
else {
fatalError("Unable to create explore table view cell")
}
// HERE, THIS IS WHERE YOU DO IT
return cell
}
刚刚在一个类似的项目中找到了答案:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if let _cell = tableView.dequeueReusableCell(withIdentifier: tableCellIdentifier, for: indexPath) as? CatalogueTableViewCell {
// THIS
_cell.images = images[indexPath.section]
return _cell
} else {
return UITableViewCell()
}
}
图像是用于通信的属性:
class CatalogueTableViewCell: UITableViewCell {
internal var images: [UIImage]!
}
请一次只问一个问题。从简单开始。。。如果你努力解决你的问题,所以你只能问第一个问题,你可能会自己找到答案。至少,你可以发布一个独立的问题,问题是我如何将信息传达给tableViewCell。我只想提供两种方法,这两种方法与我的回答相同(这是不必要的,我可以只问一个问题:我如何做到这一点)。@matt您没有提供详细信息