Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios SWIFT:将定义了tableView的ViewController中的数据传送到tableViewCell_Ios_Swift_Uitableview_Tvos_Uitableviewdiffabledatasource - Fatal编程技术网

Ios SWIFT:将定义了tableView的ViewController中的数据传送到tableViewCell

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

我在viewController中以编程方式实现了tableView:

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您没有提供详细信息