将Child View Controller视图添加到动态UITableViewCell

时间:2015-06-12 22:13:24

标签: ios swift uitableview childviewcontroller

如何将子视图控制器的视图添加到自定义vector<*Link> ?我可以在UITableViewCell

中添加这样的视图
cellForRowAtIndexPath

但是当单元格消失时,我需要删除这个子视图控制器。我不确定该怎么做。有没有更好的方法来解决这个问题?

2 个答案:

答案 0 :(得分:6)

通过委托来做。我已经完成了集合视图,你也可以在tableview上完成它。请按照以下步骤

1.在您的自定义单元格类中,创建一个delegateHandler并覆盖您的awakeFromNib()方法。例如

protocol BibleReadingSliderProtocol: class {
    func addThisViewControllerAsChild(audioViewController :AudioViewController)
}

class BibleReadingSliderCollectionCell: UICollectionViewCell {

    @IBOutlet weak var containerView: UIView!

    var audioVC = AudioViewController()
    weak var bibleReadingSliderDelegate:BibleReadingSliderProtocol?

    override func awakeFromNib() {
        super.awakeFromNib()

        print("Awake call from cell")
        // Initialization code

         let storyboard = UIStoryboard(name: "Main", bundle: nil)
        audioVC  = storyboard.instantiateViewController(withIdentifier: "AudioViewController") as! AudioViewController
        audioVC.view.frame = self.containerView.bounds
        self.containerView.addSubview(audioVC.view)

        if self.bibleReadingSliderDelegate != nil {
            self.bibleReadingSliderDelegate?.addThisViewControllerAsChild(audioViewController: audioVC)
        }

    }
}
  1. 在ViewController中使用此custom cell(tableview或collection view)定义委托人

    func addThisViewControllerAsChild(audioViewController: AudioViewController) {
        self.addChildViewController(audioViewController);
     }
    
  2. 并且别忘了在cellForItemAt / cellForRowAt

    中设置你的委托给这个viewcontroller
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    
        let imageSliderCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath) as! BibleReadingSliderCollectionCell
    
        imageSliderCollectionViewCell.bibleReadingSliderDelegate = self
        return imageSliderCollectionViewCell
    }
    

答案 1 :(得分:2)

不要误解MVC。并非世界上每个视图都需要拥有自己的个人视图控制器!主视图有一个视图控制器,但该主视图中的按钮没有其自己的个人视图控制器;它只是与主视图的视图控制器进行对话。

这种观点也是如此。观点可以很容易地来来去去;当你不需要时,不要添加额外的视图控制器的重量级负担!只需抓住视图(以某种方式)并将其粘贴到单元格contentView中,或将其从contentView中的单元格cellForRowAtIndexPath:中移除,就像任何其他视图一样 - 但使用您的表视图控制器或表视图数据源/委托或此处的任何负责来管理它。为了这个小视图,不要在故事中添加额外的视图控制器。这可能是对视图控制器的不良使用。