如何用swift实现树形视图,请给出代码
时间: 2024-05-12 09:20:04 浏览: 10
以下是使用Swift实现树形视图的示例代码:
1. 定义树节点
```swift
class TreeNode {
var value: Int
var children: [TreeNode]
init(value: Int) {
self.value = value
self.children = []
}
func addChild(child: TreeNode) {
self.children.append(child)
}
}
```
2. 创建树形视图控制器
```swift
class TreeViewController: UIViewController {
var treeView: UITableView!
var rootNode: TreeNode!
override func viewDidLoad() {
super.viewDidLoad()
self.title = "Tree View"
// 初始化根节点
self.rootNode = TreeNode(value: 0)
let node1 = TreeNode(value: 1)
let node2 = TreeNode(value: 2)
let node3 = TreeNode(value: 3)
let node4 = TreeNode(value: 4)
node1.addChild(child: node2)
node1.addChild(child: node3)
node2.addChild(child: node4)
self.rootNode.addChild(child: node1)
// 初始化树形视图
self.treeView = UITableView(frame: self.view.frame)
self.treeView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
self.treeView.dataSource = self
self.treeView.delegate = self
self.view.addSubview(self.treeView)
}
}
```
3. 实现树形视图数据源方法
```swift
extension TreeViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.rootNode.children.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
let childNode = self.rootNode.children[indexPath.row]
cell.textLabel?.text = "\(childNode.value)"
return cell
}
}
```
4. 实现树形视图委托方法
```swift
extension TreeViewController: UITableViewDelegate {
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let childNode = self.rootNode.children[indexPath.row]
if childNode.children.count > 0 {
let childController = TreeViewController()
childController.rootNode = childNode
self.navigationController?.pushViewController(childController, animated: true)
}
}
}
```
以上是使用Swift实现树形视图的示例代码,其中树节点使用了类的形式来定义,并且树形视图的数据源和委托方法都被实现了。在实现过程中,我们使用了UITableView作为树形视图的容器,并且通过递归调用将树形结构展现出来。