在 UIcollectionView 的 didSelect 上更改 tableviewHeader

Change tableviewHeader on didSelect of UIcollectionView

我有 2 个 ViewController,FirstViewControllerSecondViewController。 第一个包含 UITableView,另一个包含 UICollectionView 和 headerViews。

假设我有 2 个 UITableView headers、DefaultHeaderView 和 SelectedHeaderView,那么我要实现什么?

我想要实现的是,当 SecondViewController didSelect 中的 UICollectionView 被点击时,我想要 FirstViewControllerUITableView change/replace 它的 DefaultHeaderViewSelectedHeaderView . 但是,到目前为止我所尝试的方法似乎不起作用或者根本不是正确的方法。

我已经在 FirstViewController 中声明了这个变量以确定是否需要更改并重新加载 tableView:

var isNewHeader = false {
        didSet {
            tableVIew.reloadData()
        }

这是我的 tableView viewForHeaderInSection 方法:


    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let defaultHeader = tableView.dequeueReusableHeaderFooterView(withIdentifier: DefaultHeaderView.identifier) as! DefaultHeaderView
        let selectedHeader = tableView.dequeueReusableHeaderFooterView(withIdentifier: SelectedHeaderView.identifier) as! SelectedHeaderView

        if (isNewHeader) {
            return selectedHeader
        } else {
            // defaultHeader is set as the default value.
            return defaultHeader
        }
        
    }

创建后,在 SecondViewControllerUICollectionViews didSelectItem 方法中,我试图将 isNewHeader 设置为 true并获得 FirstViewController 到 return 替换的 headerView。

extension SecondViewController: UICollectionViewDelegate {
    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        if let vc = storyboard?.instantiateViewController(withIdentifier: "FirstViewController") as? FirstViewController {
            //** Here, I am getting `nil` return value for tableView in `FirstViewController` 
                 which actually is obvious.
            vc.isNewHeader = true
            self.navigationController?.popViewController(animated: true)
        }
    }
}

有没有更好的方法?

instantiateViewController 使用指定的标识符创建视图控制器,并使用情节提要中的数据对其进行初始化。您可以通过比较实例来简单地检查它

当您使用 navigationController?.popViewController(animated: true) 时,我假设 FirstViewControllernavigationController

的根

您可以使用 if let vc = navigationController?.viewControllers.first as? FirstViewController