【发布时间】:2020-12-14 16:31:59
【问题描述】:
我有 2 个 ViewController,FirstViewController 和 SecondViewController。
第一个包含UITableView,另一个包含UICollectionView,分别带有headerViews。
假设我有 2 个UITableView 标头,DefaultHeaderView 和 SelectedHeaderView,那么我要达到什么目的?
我想要实现的是,当SecondViewController didSelect 中的UICollectionView 被点击时,我希望FirstViewController 的UITableView 将其DefaultHeaderView 更改/替换为@987654332 @
.
但是,到目前为止我尝试过的方法似乎不起作用或根本不是正确的方法。
我已经在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
}
}
创建后,在SecondViewController 的UICollectionViews didSelectItem 方法中,我尝试将isNewHeader 设置为true 并获取FirstViewController 以返回替换的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)
}
}
}
有没有更好的方法?
【问题讨论】:
标签: ios swift uitableview uicollectionview