首页 > 解决方案 > Swift - 在一个视图中加载不同的视图

问题描述

我正在研究Wishlist-App一个问题,但我遇到了一个需要解释的问题:

图片便于理解:

我的主页(第一张图片)包含一个CollectionView用户可以添加项目(“不同的愿望清单”)的地方,它看起来像第二张图片:

在此处输入图像描述 在此处输入图像描述

目前,用户可以点击“主要愿望清单”,如下所示:

在此处输入图像描述

用户可以“添加愿望”(点击底部的 + 按钮),然后将其添加到“主要愿望清单”TableView中。

代码:

我的“主要愿望清单”——cell在它自己的自定义类中,用户可以添加的所有其他“愿望清单”(“TestList”、“TestList2”)都是一个类。

TableView点击“主要愿望清单”后出现的不是cell另一个ViewController。Is 只是一个View让我出现/消失的view.transoform.

这是我的“WishlistView”(第三张图片):

let wishlistView: UIView = {
    let v = UIView()
    v.translatesAutoresizingMaskIntoConstraints = false
    v.backgroundColor = .darkGray
    v.layer.cornerRadius = 30
    return v
}()

lazy var theTableView: WhishlistTableViewController = {
   let v = WhishlistTableViewController()
    v.view.layer.masksToBounds = true
    v.view.layer.borderColor = UIColor.white.cgColor
    v.view.backgroundColor = .clear
    v.view.layer.borderWidth = 7.0
    v.view.translatesAutoresizingMaskIntoConstraints = false
    return v
}()

let dismissWishlistViewButton: UIButton = {
    let v = UIButton()
    v.setImage(UIImage(named: "dropdown"), for: .normal)
    v.translatesAutoresizingMaskIntoConstraints = false
    v.addTarget(self, action: #selector(hideView), for: .touchUpInside)
    return v
}()

let menueButton: UIButton = {
    let v = UIButton()
    v.setImage(UIImage(named: "menueButton"), for: .normal)
    v.translatesAutoresizingMaskIntoConstraints = false
    v.addTarget(self, action: #selector(menueButtonTapped), for: .touchUpInside)
    return v
}()

let wishlistLabel: UILabel = {
    let v = UILabel()
    v.text = "Main Wishlist"
    v.font = UIFont(name: "AvenirNext-Bold", size: 30)
    v.textColor = .white
    v.translatesAutoresizingMaskIntoConstraints = false
    return v
}()

let wishCounterLabel: UILabel = {
    let v = UILabel()
    v.text = "5 unerfüllte Wünsche"
    v.font = UIFont(name: "AvenirNext", size: 12)
    v.textColor = .white
    v.font = v.font.withSize(12)
    v.translatesAutoresizingMaskIntoConstraints = false
    return v
}()

let wishlistImage: UIImageView = {
    let v = UIImageView()
    v.image = UIImage(named: "iconRoundedImage")
    v.translatesAutoresizingMaskIntoConstraints = false
    return v
}()

它在用户点击“主要愿望清单”后出现 -cell如下所示:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
           
   if indexPath.item == 0 {
       let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "MainWishlistCell", for: indexPath) as! MainWishlistCell
    
    cell.wishlistTapCallback = {
        // let wishlistView appear
        UIView.animate(withDuration: 0.3, delay: 0, options: .curveEaseIn, animations: {
            self.wishlistView.transform = CGAffineTransform(translationX: 0, y: 0)
        })
        // let welcomeText disappear
        UIView.animate(withDuration: 0.2, delay: 0, options: .curveEaseOut, animations: {
            self.welcomeTextLabel.transform = CGAffineTransform(translationX: 0, y: 0)
        })
    
    }
       return cell
   }
 
   else if indexPath.item <= theData.count {
       let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ContentCell", for: indexPath) as! ContentCell
    
       cell.testLabel.text = theData[indexPath.item - 1]
        cell.testImage.image = self.image
        cell.testImage.image = imageData[indexPath.item - 1]
        
       return cell
   }
 
   // past the end of the data count, so return an "Add Item" cell
   let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "AddItemCell", for: indexPath) as! AddItemCell

   // set the closure
   cell.tapCallback = {
    
    self.listNameTextfield.becomeFirstResponder()
   
    // let newListView appear
    UIView.animate(withDuration: 0.3, delay: 0, options: .curveEaseOut, animations: {
        self.blurrImage.alpha = 0.96
        self.blurrImage.transform = CGAffineTransform(translationX: 0, y: 0)
        self.newListView.transform = CGAffineTransform(translationX: 0, y: 0)
        self.view.layoutIfNeeded()
    })
   }
   return cell
}

问题:

最后,每个cell(愿望清单)都应该打开View(有自己的TableView和相应的UIImageLabel。但是我怎样才能TableView为每个创建的新“愿望清单”加载一个新的呢?

我不是在这里寻找特定的代码答案!我对此很陌生,我不知道如何实现这一点。因此,如果您能向我解释如何进行以及实现此任务的基本想法是什么,我将不胜感激,在此先感谢 :) 如果有任何不清楚的地方,请告诉我。

标签: iosswiftclassuiview

解决方案


只需在那里实现另一个 UItableViewController,可能使用容器视图。它将包含的视图将是您的 TestList (UITableViewController)


推荐阅读