在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 单元格顶部添加子视图而不被前一个单元格覆盖
将 UISearchBar 作为子视图添加到 tableView 标题中