mirror of
https://github.com/nicklockwood/SwiftFormat.git
synced 2026-05-17 10:30:35 +00:00
63 lines
2.0 KiB
Swift
Executable File
63 lines
2.0 KiB
Swift
Executable File
// Copyright © 2017 Schibsted. All rights reserved.
|
|
|
|
import Layout
|
|
import UIKit
|
|
|
|
final class TreeViewController: UITableViewController {
|
|
func nodeName(_ node: LayoutNode) -> String {
|
|
return node.viewController.map {
|
|
var name = "\($0.classForCoder)"
|
|
if let title = $0.title, !title.isEmpty {
|
|
name += " (\(title))"
|
|
}
|
|
return name
|
|
} ?? "\(node.view.classForCoder)"
|
|
}
|
|
|
|
var layoutNode: LayoutNode? {
|
|
didSet {
|
|
tableView.reloadData()
|
|
if layoutNode?.parent != nil {
|
|
title = nodeName(layoutNode!)
|
|
} else {
|
|
title = "Root"
|
|
}
|
|
}
|
|
}
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
|
|
}
|
|
|
|
override func tableView(_: UITableView, numberOfRowsInSection _: Int) -> Int {
|
|
return layoutNode?.children.count ?? 0
|
|
}
|
|
|
|
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
|
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
|
|
if let layoutNode = layoutNode, layoutNode.children.count > indexPath.row {
|
|
cell.textLabel?.text = nodeName(layoutNode.children[indexPath.row])
|
|
}
|
|
return cell
|
|
}
|
|
|
|
override func tableView(_: UITableView, didSelectRowAt indexPath: IndexPath) {
|
|
guard let layoutNode = layoutNode, layoutNode.children.count > indexPath.row else {
|
|
return
|
|
}
|
|
let node = layoutNode.children[indexPath.row]
|
|
|
|
if !node.children.isEmpty {
|
|
let controller = TreeViewController()
|
|
controller.layoutNode = node
|
|
navigationController?.pushViewController(controller, animated: true)
|
|
}
|
|
|
|
if let designViewController = splitViewController?.viewControllers[1] as? DesignViewController {
|
|
designViewController.selectedNode = node
|
|
designViewController.editNode()
|
|
}
|
|
}
|
|
}
|