在tableview上添加子tableview

时间:2016-05-11 15:51:40

标签: ios xcode swift

我有点问题:

gif animation

在我的视图中添加了一个tableview,用于显示类别,并在为显示子类别选择类别时添加另一个tableview。但是与顶级单元的交互无法识别,我不明白为什么!如果有人想要解决这个问题,或其他方式使这些动画成为可能..

代码很复杂,但我会尝试清楚解释:

  1. 主控制器FilterViewController继承自UIViewController
  2. 选择“类别”行后,会创建CategoryFilterViewController的实例化,并将视图添加到FilterViewController's视图。
  3. CategoryFilterViewController上,当选择一行时,我实例化新的tableView并将其添加到视图中。
  4. CategoryViewController storyboard view

    FilterViewController的一部分,变量和出口
    您可以看到我使用SnapKit以编程方式进行一些约束

    var contentViewCatHeightContrain: Constraint? = nil
    var contentViewCatBottomContrain: Constraint? = nil
    
    @IBOutlet weak var filterTableView: UITableView!
    @IBOutlet weak var submitFilterButton: UIButton!
    

    您在此处看到,当选择“类别”行时,我运行此代码。

    func displayCat(show: Bool, cell: FilterCell) {
         let cellRow = self.filterTableView.indexPathForCell(cell)!
         if(cellRow.row == 0) {
             if(self.viewModel.categoryContentsView == nil) {
                 if let vc = self.storyboard?.instantiateViewControllerWithIdentifier("CategoryFilterView") as? CategoryFilterView {
                     self.viewModel.categoryContentsView = vc
                     self.viewModel.categoryContentsView.view.frame = CGRectMake(0, self.view.frame.size.height, self.view.frame.size.width, 0)
                     self.view.addSubview(self.viewModel.categoryContentsView.view)
                     self.addChildViewController(vc)
                     self.viewModel.categoryContentsView.view.snp_makeConstraints(closure: { (make) -> Void in
                         self.contentViewCatHeightContrain = make.height.equalTo(0).constraint
                         make.left.equalTo(0)
                         make.right.equalTo(0)
                         self.contentViewCatBottomContrain = make.bottom.equalTo(0).constraint
                     })
                 }
             }
             self.viewModel.categoryContentsView.view.didMoveToSuperview()
             self.view.bringSubviewToFront(self.viewModel.categoryContentsView.view)
         }
    }
    

    CategoryViewController,出口:

    @IBOutlet weak var catTableView: UITableView!
    @IBOutlet weak var topCatTableView: NSLayoutConstraint!
    @IBOutlet weak var subCatHeightContrain: NSLayoutConstraint!
    @IBOutlet weak var subCatTableView: UITableView!
    

    并选择行:

    func showHideTableView(show: Bool) {
        if(show) {
            self.topCatTableView.constant = -75
            self.subCatHeightContrain.constant = UIScreen.mainScreen().bounds.size.height - 95
        }
        else {
            self.topCatTableView.constant = 0
            self.subCatHeightContrain.constant = 0
            self.catTableView.reloadData()
        }
    }
    

1 个答案:

答案 0 :(得分:0)

我终于找到了错误的

CategoryViewController上的第二个tableView顶部约束不是0值。 我在子tableView上将clipSubviews设置为false,这意味着顶部单元格仍然可见但无法处理任何交互,因为它不在框架内。

感谢大家的回答,这帮助我找到了解决方案