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

我对此有点问题:

gif animation

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

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

  1. 主控制器是FilterViewController继承自UIViewController
  2. 选择“类别”行时,会创建 CategoryFilterViewController 的实例化并将视图添加到 FilterViewController's 视图中。
  3. 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 是的,这是可能的,但我不认为动画可以和我的一样。

标签: ios xcode swift


【解决方案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,这意味着顶部单元格仍然可见但无法处理任何交互,因为它超出了框架。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-10
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2021-12-04
    • 2016-05-06
    相关资源
    最近更新 更多