gpt4 book ai didi

ios - UICollectionViewController 调用另一个 UICollectionViewController 的 DataSource 方法

转载 作者:行者123 更新时间:2023-11-29 11:37:46 25 4
gpt4 key购买 nike

我已经实现了自定义 UITabBarController
第一个和第二个 UITabBarItem 是一个 UICollectionViewController
第四个 UITabBarItem 是一个 UIViewController

第一个选项卡中的 CollectionView 及其单元格以编程方式创建,并且与动态单元格大小完美配合。

第二个选项卡中的 CollectionView 方法未被编辑。

问题: 应用启动,第一个 CollectionView 加载了一个单元格,然后我转到第二个选项卡,它也是一个没有任何单元格的 CollectionViewController,然后我再次转到第一个选项卡,然后第一个 UICollectionview 上的单元格不会显示。

我注意到的事情:

  1. 在两个 VC 中的 collectionview 方法上添加了调试点。在我从第二个选项卡移动到第一个选项卡后,第一个选项卡 VC 正在调用第二个 VC 的方法(奇怪!)。
  2. 转到第四个选项卡 (UIViewController),然后返回到第一个选项卡不会导致任何问题。

我试过的解决方案:

  1. viewWillAppear 中注册第一个 VC 的单元格(它曾经在 dequeueReusableCell 处崩溃,但现在在分配标签并在 cellForItemAt 中检查它后不会崩溃)
  2. 将标签分配给两个 VC 中的 collectionview 并在两个 VC 的方法中检查 collectioniView.tag,但是第一个选项卡 VC 仍在调用第二个选项卡 VC 中的方法

编辑 1:
viewWillAppear()

中调用
SetupCollectionView(){
collectionView?.register(VideoCell.self, forCellWithReuseIdentifier: cellId)
self.collectionView?.delegate = self
self.collectionView?.dataSource = self
}

第一个 VC 中的 CollectionView 方法

override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
if collectionView.tag == 339 {
print("videos.count: \(self.videos.count)")
if videos.count > 0 {
return self.videos.count
}else {
return 0
}
}
return 0
}

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

if collectionView.tag == 339 {
//setup cell to display
}else{
let cell2 = collectionView.dequeueReusableCell(withReuseIdentifier: "cellId", for: indexPath)
return cell2
}
}

sizeForItemAt 和第二个 VC 中执行相同的检查。

编辑2:

  1. 在 AppDelegate 中

    self.window?.rootViewController = CustomTabBarController()

  2. 在 CustomTabBarController 中

第一风投

        let layout = UICollectionViewFlowLayout()
let homeController = HomeControllerMain(collectionViewLayout: layout)
let homeViewNavController = UINavigationController(rootViewController: homeController)
homeViewNavController.tabBarItem.title = nil
homeViewNavController.tabBarItem.image = UIImage(named: "home1")
homeViewNavController.tabBarItem.selectedImage = UIImage(named: "home")
homeViewNavController.tabBarItem.imageInsets = UIEdgeInsets(top: 6, left: 0, bottom: -6, right: 0)

第二个风投

let commentController = searchMainViewController(collectionViewLayout: layout)
let commentViewNavController = UINavigationController(rootViewController: commentController)
commentViewNavController.tabBarItem.title = ""
commentViewNavController.tabBarItem.image = UIImage(named: "search1")
commentViewNavController.tabBarItem.selectedImage = UIImage(named: "search")?.withRenderingMode(.alwaysOriginal)
commentViewNavController.tabBarItem.imageInsets = UIEdgeInsets(top: 6, left: 0, bottom: -6, right: 0)

最佳答案

解决了!
我在 homeControllercommentController 中都使用了单个 UICollectionViewFlowLayout 变量。

commentController 创建了第二个 UICollectionViewFlowLayout 变量并解决了问题。

关于ios - UICollectionViewController 调用另一个 UICollectionViewController 的 DataSource 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48164597/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com