更改 UIcollectionView 的 didSelect 上的 tableviewHeader
Posted
技术标签:
【中文标题】更改 UIcollectionView 的 didSelect 上的 tableviewHeader【英文标题】:Change tableviewHeader on didSelect of UIcollectionView 【发布时间】: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
的UICollectionView
s 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)
有没有更好的方法?
【问题讨论】:
【参考方案1】:instantiateViewController
使用指定的标识符创建视图控制器,并使用故事板中的数据对其进行初始化。您可以通过比较实例来简单地检查它
当您使用navigationController?.popViewController(animated: true)
时,我假设FirstViewController
是navigationController
的根
你可以使用if let vc = navigationController?.viewControllers.first as? FirstViewController
之类的东西
【讨论】:
感谢您的回答,但是您的回答与问题上下文相去甚远...... 为什么会这样?你有first VC
,里面有table
,并通过推/呈现/随便呈现第二个。正如我在didSelect
方法中看到的,您正在尝试获取first VC
的实例并更新属性。但是您使用的 instantiateViewController
方法不正确。如果不只是将navigationController?.viewControllers.first as? FirstViewController
替换为whatever.viewControllers.first as? FirstViewController
,我假设您两者都在导航堆栈中
它工作了..我也有我自己的错误配置,所以一开始它没有工作,但它工作.. .以上是关于更改 UIcollectionView 的 didSelect 上的 tableviewHeader的主要内容,如果未能解决你的问题,请参考以下文章
Swift UIcollectionView 在同一个 ViewController 上更改第二个 UICollectionView 的内容?