UICollectionViewController调用另一个UICollectionViewController

时间:2018-01-09 09:05:33

标签: ios swift3 uicollectionview

我已实施自定义UITabBarController
第一和第二UITabBarItemUICollectionViewController 第四个UITabBarItemUIViewController

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

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

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

我注意到的事情:

  1. 在两个VC中的collectionview方法上添加了调试点。第一个选项卡VC在从第二个选项卡移动到第一个选项卡后调用第二个VC(奇怪!)的方法。
  2. 转到第四个标签(UIViewController),然后返回第一个标签不会造成任何问题。
  3. 我尝试过的解决方案:

    1. viewWillAppear中注册第一个VC的单元格(它曾经在dequeueReusableCell崩溃,但现在在分配标记并在cellForItemAt中检查后不会崩溃)
    2. 在两个VC中为collectionview分配标记,并在两个VC的方法中检查collectioniView.tag,但第一个选项卡VC仍然在第二个选项卡中调用方法VC
    3. 编辑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:

        AppDelegate中的
      1. self.window?.rootViewController = CustomTabBarController()

      2. CustomTabBarController中的
      3. 第一次VC

                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)
        

        第二个VC

        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)
        

1 个答案:

答案 0 :(得分:0)

解决!
我在 homeController commentController 中使用了单个UICollectionViewFlowLayout变量。

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