Need help with PBTreeView?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

partho-maple
134 Stars 11 Forks 17 Commits 3 Opened issues

Description

An UITreeView implementation from UITableView that Apple missed in its UIKit framework. And it is in pure Swift.

Services available

!
?

Need anything else?

Contributors list

# 110,631
iOS
swift5
binary-...
python3
5 commits

PBTreeView

Swift 5.0 iOS License Apache PerfectlySoft Twitter


An UITreeView implementation from UITableView that Apple missed in its UIKit framework. And it is in pure Swift.

★★ Star our github repository to help us! ★★

Created by Partho Biswas (@ParthoBiswas007)

What's in it

  • [x] An UITreeView implementation from UITableView.
  • [x] An iOS application showing it's implementation and usage.

Preview

preview

Requirements

iOS 8.0+ / Swift 5.0+

Setup and Usage

This

PBTreeView
has been drawn over
UITableView
. Every row/node of the TreeView represents a
UITableViewCell
with a custom object.

Step 1: * First you need to arrange some datasource that seems like a tree. Check this JSON datasource as example. * This JSON data contains RelationshipDetails object as primary unit. This object will contain the information for each node of the tree. This object need to have an unique identifire. In this case, it's

social_security_number
.

Step 2: * Create a

TreeViewDataHandler
object and call it's following function passing the parsed data array
public func configureTreeViewDatasource(_ relationDetails: [RelationshipDetails]) -> [TreeViewNodeItem]?
And use the return value of the above function as TreeView's data source. Lile following. ``` var dataHandler: TreeViewDataHandler? = TreeViewDataHandler()

let relations: [RelationshipDetails]? = readJson(JSONFileName) var treeViewDataSource = TreeViewNodeItem treeViewDataSource = (dataHandler?.configureTreeViewDatasource(relations!))! ```

Step 3: * Listen for

RelodeTreeView
notification to relode the TreeView. ``` NotificationCenter.default.addObserver(self, selector: #selector(relodeTreeView(_:)), name: NSNotification.Name(rawValue: "RelodeTreeView"), object: nil)

func relodeTreeView(_ notification: Notification) { self.treeViewDataSource = (dataHandler?.refreshNodes())! DispatchQueue.main.async { self.famityTreeTableView.reloadData() } } ```

Customisation

Setting up
UITableViewCell
and
UITableView

  • Create your own
    UITableViewCell
    custom subclass for the TreeView node.

Setting up custom data model

  • Just replace
    Relations
    and
    RelationshipDetails
    object with your own with proper changes and requirments.

Up Next

  • Dynamic addition and deletion of tree node.
  • Dyanmic Data Container
  • Dynamic View Holder

Contributing

Contributions are welcome. Please just open an Issue on GitHub to discuss a point or request a feature or send a Pull Request with your suggestion. If there's a related discussion on the Swift Evolution mailing list, please also post the thread name with a link.

Please also try to follow the same syntax and semantic in your commit messages (see rationale here).

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.