diff --git a/iOS/Master/MasterViewController.swift b/iOS/Master/MasterViewController.swift index 52d2a0333..24750db74 100644 --- a/iOS/Master/MasterViewController.swift +++ b/iOS/Master/MasterViewController.swift @@ -49,8 +49,9 @@ class MasterViewController: UITableViewController, UndoableCommandRunner { refreshControl = UIRefreshControl() refreshControl!.addTarget(self, action: #selector(refreshAccounts(_:)), for: .valueChanged) - // Set up the backing structures - for _ in treeController.rootNode.childNodes { + // Default the sections to expanded and set up the shadow table + for section in treeController.rootNode.childNodes { + expandedNodes.append(section) shadowTable.append([Node]()) } @@ -191,6 +192,11 @@ class MasterViewController: UITableViewController, UndoableCommandRunner { headerView.unreadCount = 0 } + headerView.tag = section + + let tap = UITapGestureRecognizer(target: self, action:#selector(self.toggleSectionHeader(_:))) + headerView.addGestureRecognizer(tap) + return headerView } @@ -360,6 +366,22 @@ class MasterViewController: UITableViewController, UndoableCommandRunner { self.present(feedViewController, animated: true) } + @objc func toggleSectionHeader(_ sender: UITapGestureRecognizer) { + + guard let sectionIndex = sender.view?.tag, + let sectionNode = treeController.rootNode.childAtIndex(sectionIndex) + else { + return + } + + if expandedNodes.contains(sectionNode) { + collapse(section: sectionIndex) + } else { + expand(section: sectionIndex) + } + + } + // MARK: API func configure(_ cell: MasterTableViewCell, _ node: Node) { @@ -572,6 +594,31 @@ private extension MasterViewController { } + func expand(section: Int) { + + guard let expandNode = treeController.rootNode.childAtIndex(section) else { + return + } + expandedNodes.append(expandNode) + + animatingChanges = true + + var indexPathsToInsert = [IndexPath]() + for i in 0..