在tableview上添加子tableview [关闭]

Posted

技术标签:

【中文标题】在tableview上添加子tableview [关闭]【英文标题】:Add sub tableview on tableview [closed] 【发布时间】:2016-09-07 03:37:13 【问题描述】:

我对此有点问题:

gif animation

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

代码显示起来很复杂,但我会尽量解释清楚:

    主控制器是FilterViewController继承自UIViewController 选择“类别”行时,会创建 CategoryFilterViewController 的实例化并将视图添加到 FilterViewController's 视图中。 On the CategoryFilterViewController, when a row selected, I instantiate new tableView and add it to the view.

CategoryViewController storyboard view

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

var contentViewCatHeightContrain: Constraint? = nil
var contentViewCatBottomContrain: Constraint? = nil

@IBOutlet weak var filterTableView: UITableView!
@IBOutlet weak var submitFilterButton: UIButton!

You see here, when "Categories" row selected, I run this code.

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()
    

【问题讨论】:

您绝对不想在您现有的 tableView 中添加另一个 UITableView。我认为您要做的是在包含 ViewController 的主视图中添加另一个 tableView。 向我们展示代码!!! PLEASSEEEE !!! 我建议在 tableView 上添加更多单元格,而不是添加另一个 tableView @ZGski 我这样做是在主视图上而不是在 tableView 本身上。 @penatheboss 是的,这是可能的,但我不认为动画可以和我的一样。 【参考方案1】:

这可以帮助您创建可展开和可折叠的表格视图

http://www.appcoda.com/expandable-table-view/

在索引更改导航栏标题的 didSelectedRow 上并将表格滚动到特定索引以将其置于顶部。

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)


    self.title = // String from your array which is displayed on cellForRowAtIndex

    let no = indexPath.row + 4 // Particular no which scroll table view up side so your selected row comes on first

    let lastIndex = NSIndexPath(forRow: no, inSection: 0)

    tableView.scrollToRowAtIndexPath(lastIndex, atScrollPosition: .Bottom, animated: true)


后退按钮和导航栏标题动画只有一件事需要妥协。

后退按钮,通过是否使用标志 is_expandable 可以弹出视图控制器或折叠表格。

希望这将帮助您找出解决方案。

一切顺利。

【讨论】:

我试过你的方法,它的工作,但我没有我需要的动画。但是您的回答帮助我找到了问题所在!所以,谢谢! 一切顺利。编码愉快。【参考方案2】:

我终于找到了问题所在

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

感谢所有回答,帮助我找到解决方案

【讨论】:

以上是关于在tableview上添加子tableview [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

iOS - 如何在 tableView 单元格顶部添加子视图而不被前一个单元格覆盖

如何添加约束以将 tableview 固定到其父底部

将 UISearchBar 作为子视图添加到 tableView 标题中

UITableView 的子视图与 tableView 的高度不同

将子视图添加到自定义类

Swift:如何在 tableView 中模糊点击单元格