From 232b819be31f76e9e3d44cb724a2fda8ce691457 Mon Sep 17 00:00:00 2001 From: Roman Bobryk Date: Thu, 11 Feb 2021 21:20:53 +0200 Subject: [PATCH 1/2] Put in order class files and example --- .../CITreeView.xcodeproj/project.pbxproj | 41 +-- .../CITreeViewClasses/CITreeView.swift | 237 ------------------ .../CITreeViewController.swift | 203 --------------- .../CITreeViewClasses/CITreeViewNode.swift | 20 -- .../Controllers/ViewController.swift | 23 +- CITreeViewClasses/CITreeView.swift | 76 +++--- CITreeViewClasses/CITreeViewController.swift | 84 +++---- CITreeViewClasses/CITreeViewNode.swift | 10 +- 8 files changed, 114 insertions(+), 580 deletions(-) delete mode 100644 CITreeView/CITreeView/CITreeViewClasses/CITreeView.swift delete mode 100644 CITreeView/CITreeView/CITreeViewClasses/CITreeViewController.swift delete mode 100644 CITreeView/CITreeView/CITreeViewClasses/CITreeViewNode.swift diff --git a/CITreeView/CITreeView.xcodeproj/project.pbxproj b/CITreeView/CITreeView.xcodeproj/project.pbxproj index 59d7e0e..e521e05 100644 --- a/CITreeView/CITreeView.xcodeproj/project.pbxproj +++ b/CITreeView/CITreeView.xcodeproj/project.pbxproj @@ -13,11 +13,11 @@ 187EB6CD20190F8E00C8DC19 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 187EB6CC20190F8E00C8DC19 /* Assets.xcassets */; }; 187EB6D020190F8E00C8DC19 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 187EB6CE20190F8E00C8DC19 /* LaunchScreen.storyboard */; }; 187EB6D92019107A00C8DC19 /* CITreeViewData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 187EB6D82019107A00C8DC19 /* CITreeViewData.swift */; }; - 187EB6DB2019164F00C8DC19 /* CITreeViewNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 187EB6DA2019164F00C8DC19 /* CITreeViewNode.swift */; }; - 187EB6DD2019169B00C8DC19 /* CITreeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 187EB6DC2019169B00C8DC19 /* CITreeViewController.swift */; }; - 187EB6DF2019186200C8DC19 /* CITreeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 187EB6DE2019186200C8DC19 /* CITreeView.swift */; }; 187EB6E320191BFF00C8DC19 /* CITreeViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 187EB6E120191BFF00C8DC19 /* CITreeViewCell.swift */; }; 187EB6E420191BFF00C8DC19 /* CITreeViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 187EB6E220191BFF00C8DC19 /* CITreeViewCell.xib */; }; + 2B28FF8425D5AEB2001B087D /* CITreeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B28FF8125D5AEB2001B087D /* CITreeViewController.swift */; }; + 2B28FF8525D5AEB2001B087D /* CITreeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B28FF8225D5AEB2001B087D /* CITreeView.swift */; }; + 2B28FF8625D5AEB2001B087D /* CITreeViewNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B28FF8325D5AEB2001B087D /* CITreeViewNode.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -29,11 +29,11 @@ 187EB6CF20190F8E00C8DC19 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 187EB6D120190F8E00C8DC19 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 187EB6D82019107A00C8DC19 /* CITreeViewData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CITreeViewData.swift; sourceTree = ""; }; - 187EB6DA2019164F00C8DC19 /* CITreeViewNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CITreeViewNode.swift; sourceTree = ""; }; - 187EB6DC2019169B00C8DC19 /* CITreeViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CITreeViewController.swift; sourceTree = ""; }; - 187EB6DE2019186200C8DC19 /* CITreeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CITreeView.swift; sourceTree = ""; }; 187EB6E120191BFF00C8DC19 /* CITreeViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CITreeViewCell.swift; sourceTree = ""; }; 187EB6E220191BFF00C8DC19 /* CITreeViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CITreeViewCell.xib; sourceTree = ""; }; + 2B28FF8125D5AEB2001B087D /* CITreeViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CITreeViewController.swift; sourceTree = ""; }; + 2B28FF8225D5AEB2001B087D /* CITreeView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CITreeView.swift; sourceTree = ""; }; + 2B28FF8325D5AEB2001B087D /* CITreeViewNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CITreeViewNode.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -69,7 +69,7 @@ 187EB6E620191F2200C8DC19 /* Models */, 187EB6E520191CFB00C8DC19 /* Controllers */, 187EB6E020191BE600C8DC19 /* Views */, - 187EB6D72019102C00C8DC19 /* CITreeViewClasses */, + 2B28FF8025D5AEB2001B087D /* CITreeViewClasses */, 187EB6C520190F8E00C8DC19 /* AppDelegate.swift */, 187EB6C920190F8E00C8DC19 /* Main.storyboard */, 187EB6CC20190F8E00C8DC19 /* Assets.xcassets */, @@ -79,16 +79,6 @@ path = CITreeView; sourceTree = ""; }; - 187EB6D72019102C00C8DC19 /* CITreeViewClasses */ = { - isa = PBXGroup; - children = ( - 187EB6DA2019164F00C8DC19 /* CITreeViewNode.swift */, - 187EB6DC2019169B00C8DC19 /* CITreeViewController.swift */, - 187EB6DE2019186200C8DC19 /* CITreeView.swift */, - ); - path = CITreeViewClasses; - sourceTree = ""; - }; 187EB6E020191BE600C8DC19 /* Views */ = { isa = PBXGroup; children = ( @@ -114,6 +104,17 @@ path = Models; sourceTree = ""; }; + 2B28FF8025D5AEB2001B087D /* CITreeViewClasses */ = { + isa = PBXGroup; + children = ( + 2B28FF8225D5AEB2001B087D /* CITreeView.swift */, + 2B28FF8125D5AEB2001B087D /* CITreeViewController.swift */, + 2B28FF8325D5AEB2001B087D /* CITreeViewNode.swift */, + ); + name = CITreeViewClasses; + path = ../../CITreeViewClasses; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -188,12 +189,12 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 187EB6DB2019164F00C8DC19 /* CITreeViewNode.swift in Sources */, 187EB6D92019107A00C8DC19 /* CITreeViewData.swift in Sources */, - 187EB6DD2019169B00C8DC19 /* CITreeViewController.swift in Sources */, 187EB6C820190F8E00C8DC19 /* ViewController.swift in Sources */, + 2B28FF8625D5AEB2001B087D /* CITreeViewNode.swift in Sources */, + 2B28FF8425D5AEB2001B087D /* CITreeViewController.swift in Sources */, 187EB6E320191BFF00C8DC19 /* CITreeViewCell.swift in Sources */, - 187EB6DF2019186200C8DC19 /* CITreeView.swift in Sources */, + 2B28FF8525D5AEB2001B087D /* CITreeView.swift in Sources */, 187EB6C620190F8E00C8DC19 /* AppDelegate.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/CITreeView/CITreeView/CITreeViewClasses/CITreeView.swift b/CITreeView/CITreeView/CITreeViewClasses/CITreeView.swift deleted file mode 100644 index 240e50b..0000000 --- a/CITreeView/CITreeView/CITreeViewClasses/CITreeView.swift +++ /dev/null @@ -1,237 +0,0 @@ -// -// CITreeViewController.swift -// CITreeView -// -// Created by Apple on 24.01.2018. -// Copyright © 2018 Cenk Işık. All rights reserved. -// - -import UIKit - -@objc -public protocol CITreeViewDataSource: NSObjectProtocol { - func treeView(_ treeView: CITreeView, cellForRowAt indexPath: IndexPath, with treeViewNode: CITreeViewNode) -> UITableViewCell - func treeViewSelectedNodeChildren(for treeViewNodeItem: Any) -> [Any] - func treeViewDataArray() -> [Any] -} - -@objc -public protocol CITreeViewDelegate: NSObjectProtocol { - func treeView(_ treeView: CITreeView, heightForRowAt indexPath: IndexPath, with treeViewNode: CITreeViewNode) -> CGFloat - func treeView(_ treeView: CITreeView, didSelectRowAt treeViewNode: CITreeViewNode, at indexPath: IndexPath) - func treeView(_ treeView: CITreeView, didDeselectRowAt treeViewNode: CITreeViewNode, at indexPath: IndexPath) - func treeViewNode(_ treeViewNode: CITreeViewNode, willExpandAt indexPath: IndexPath) - func treeViewNode(_ treeViewNode: CITreeViewNode, didExpandAt indexPath: IndexPath) - func treeViewNode(_ treeViewNode: CITreeViewNode, willCollapseAt indexPath: IndexPath) - func treeViewNode(_ treeViewNode: CITreeViewNode, didCollapseAt indexPath: IndexPath) - -} - -public class CITreeView: UITableView { - - @IBOutlet open weak var treeViewDataSource:CITreeViewDataSource? - @IBOutlet open weak var treeViewDelegate: CITreeViewDelegate? - fileprivate var treeViewController = CITreeViewController(treeViewNodes: []) - fileprivate var selectedTreeViewNode:CITreeViewNode? - public var collapseNoneSelectedRows = false - fileprivate var mainDataArray:[CITreeViewNode] = [] - - - override public init(frame: CGRect, style: UITableView.Style) { - super.init(frame: frame, style: style) - commonInit() - } - - required public init?(coder aDecoder: NSCoder) { - super.init(coder: aDecoder) - commonInit() - } - - func commonInit(){ - super.delegate = self - super.dataSource = self - treeViewController.treeViewControllerDelegate = self as CITreeViewControllerDelegate - self.backgroundColor = UIColor.clear - } - - override public func reloadData() { - - guard let treeViewDataSource = self.treeViewDataSource else { - mainDataArray = [CITreeViewNode]() - return - } - - mainDataArray = [CITreeViewNode]() - treeViewController.treeViewNodes.removeAll() - for item in treeViewDataSource.treeViewDataArray() { - treeViewController.addTreeViewNode(with: item) - } - mainDataArray = treeViewController.treeViewNodes - - super.reloadData() - } - - public func reloadDataWithoutChangingRowStates() { - - guard let treeViewDataSource = self.treeViewDataSource else { - mainDataArray = [CITreeViewNode]() - return - } - - if treeViewDataSource.treeViewDataArray().count > treeViewController.treeViewNodes.count { - mainDataArray = [CITreeViewNode]() - treeViewController.treeViewNodes.removeAll() - for item in treeViewDataSource.treeViewDataArray() { - treeViewController.addTreeViewNode(with: item) - } - mainDataArray = treeViewController.treeViewNodes - } - super.reloadData() - } - - fileprivate func deleteRows() { - if treeViewController.indexPathsArray.count > 0 { - self.beginUpdates() - self.deleteRows(at: treeViewController.indexPathsArray, with: .automatic) - self.endUpdates() - } - } - - public func deleteRow(at indexPath:IndexPath) { - self.beginUpdates() - self.deleteRows(at: [indexPath], with: .automatic) - self.endUpdates() - } - - fileprivate func insertRows() { - if treeViewController.indexPathsArray.count > 0 { - self.beginUpdates() - self.insertRows(at: treeViewController.indexPathsArray, with: .automatic) - self.endUpdates() - } - } - - fileprivate func collapseRows(for treeViewNode: CITreeViewNode, atIndexPath indexPath: IndexPath ,completion: @escaping () -> Void) { - guard let treeViewDelegate = self.treeViewDelegate else { return } - if #available(iOS 11.0, *) { - self.performBatchUpdates({ - deleteRows() - }, completion: { (complete) in - treeViewDelegate.treeViewNode(treeViewNode, didCollapseAt: indexPath) - completion() - }) - } else { - CATransaction.begin() - CATransaction.setCompletionBlock({ - treeViewDelegate.treeViewNode(treeViewNode, didCollapseAt: indexPath) - completion() - }) - deleteRows() - CATransaction.commit() - } - } - - fileprivate func expandRows(for treeViewNode: CITreeViewNode, withSelected indexPath: IndexPath) { - guard let treeViewDelegate = self.treeViewDelegate else {return} - if #available(iOS 11.0, *) { - self.performBatchUpdates({ - insertRows() - }, completion: { (complete) in - treeViewDelegate.treeViewNode(treeViewNode, didExpandAt: indexPath) - }) - } else { - CATransaction.begin() - CATransaction.setCompletionBlock({ - treeViewDelegate.treeViewNode(treeViewNode, didExpandAt: indexPath) - }) - insertRows() - CATransaction.commit() - } - } - - func getAllCells() -> [UITableViewCell] { - var cells = [UITableViewCell]() - for section in 0 ..< self.numberOfSections{ - for row in 0 ..< self.numberOfRows(inSection: section){ - cells.append(self.cellForRow(at: IndexPath(row: row, section: section))!) - } - } - return cells - } - - public func expandAllRows() { - treeViewController.expandAllRows() - reloadDataWithoutChangingRowStates() - } - - public func collapseAllRows() { - treeViewController.collapseAllRows() - reloadDataWithoutChangingRowStates() - } -} - -extension CITreeView: UITableViewDelegate { - - public func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { - let treeViewNode = treeViewController.getTreeViewNode(atIndex: indexPath.row) - return (self.treeViewDelegate?.treeView(tableView as! CITreeView, heightForRowAt: indexPath, with: treeViewNode))! - } - - public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { - selectedTreeViewNode = treeViewController.getTreeViewNode(atIndex: indexPath.row) - guard let treeViewDelegate = self.treeViewDelegate else { return } - - if let justSelectedTreeViewNode = selectedTreeViewNode { - treeViewDelegate.treeView(tableView as! CITreeView, didSelectRowAt: justSelectedTreeViewNode, at: indexPath) - var willExpandIndexPath = indexPath - if justSelectedTreeViewNode.expand { - treeViewController.collapseRows(for: justSelectedTreeViewNode, atIndexPath: indexPath) - collapseRows(for: justSelectedTreeViewNode, atIndexPath: indexPath){} - } else { - if collapseNoneSelectedRows, - selectedTreeViewNode?.level == 0, - let collapsedTreeViewNode = treeViewController.collapseAllRowsExceptOne(), - treeViewController.indexPathsArray.count > 0 { - - collapseRows(for: collapsedTreeViewNode, atIndexPath: indexPath){ - for (index, treeViewNode) in self.mainDataArray.enumerated() { - if treeViewNode == justSelectedTreeViewNode { - willExpandIndexPath.row = index - } - } - self.treeViewController.expandRows(atIndexPath: willExpandIndexPath, with: justSelectedTreeViewNode, openWithChildrens: false) - self.expandRows(for: justSelectedTreeViewNode, withSelected: indexPath) - } - } else { - treeViewController.expandRows(atIndexPath: willExpandIndexPath, with: justSelectedTreeViewNode, openWithChildrens: false) - expandRows(for: justSelectedTreeViewNode, withSelected: indexPath) - } - } - } - } -} - -extension CITreeView: UITableViewDataSource { - public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - return treeViewController.treeViewNodes.count - } - - public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - let treeViewNode = treeViewController.getTreeViewNode(atIndex: indexPath.row) - return (self.treeViewDataSource?.treeView(tableView as! CITreeView, cellForRowAt: indexPath, with: treeViewNode))! - } -} - -extension CITreeView: CITreeViewControllerDelegate { - public func getChildren(for treeViewNodeItem: Any, at indexPath: IndexPath) -> [Any] { - return (self.treeViewDataSource?.treeViewSelectedNodeChildren(for: treeViewNodeItem)) ?? [] - } - - public func willCollapseTreeViewNode(_ treeViewNode: CITreeViewNode, at indexPath: IndexPath) { - self.treeViewDelegate?.treeViewNode(treeViewNode, willCollapseAt: indexPath) - } - - public func willExpandTreeViewNode(_ treeViewNode: CITreeViewNode, at indexPath: IndexPath) { - self.treeViewDelegate?.treeViewNode(treeViewNode, willExpandAt: indexPath) - } -} diff --git a/CITreeView/CITreeView/CITreeViewClasses/CITreeViewController.swift b/CITreeView/CITreeView/CITreeViewClasses/CITreeViewController.swift deleted file mode 100644 index c4e6a2e..0000000 --- a/CITreeView/CITreeView/CITreeViewClasses/CITreeViewController.swift +++ /dev/null @@ -1,203 +0,0 @@ -// -// CITreeViewController.swift -// CITreeView -// -// Created by Apple on 24.01.2018. -// Copyright © 2018 Cenk Işık. All rights reserved. -// - -import Foundation - -public protocol CITreeViewControllerDelegate: NSObjectProtocol { - func getChildren(for treeViewNodeItem: Any, at indexPath: IndexPath) -> [Any] - func willExpandTreeViewNode(_ treeViewNode: CITreeViewNode, at indexPath: IndexPath) - func willCollapseTreeViewNode(_ treeViewNode: CITreeViewNode, at indexPath: IndexPath) -} - -public class CITreeViewController: NSObject { - - var treeViewNodes: [CITreeViewNode] = [] - var indexPathsArray: [IndexPath] = [] - weak var treeViewControllerDelegate: CITreeViewControllerDelegate? - - init(treeViewNodes: [CITreeViewNode]) { - self.treeViewNodes = treeViewNodes - } - - //MARK: Tree View Nodes Functions - func addTreeViewNode(with item: Any) { - let treeViewNode = CITreeViewNode(item: item) - treeViewNodes.append(treeViewNode) - } - - func getTreeViewNode(atIndex index: Int) -> CITreeViewNode { - if treeViewNodes.indices.contains(index){ - return treeViewNodes[index] - } - return treeViewNodes.last! - } - - func index(of treeViewNode: CITreeViewNode) -> Int? { - return treeViewNodes.index(of: treeViewNode) - } - - func insertTreeViewNode(parent parentTreeViewNode: CITreeViewNode, with item: Any, to index: Int) { - let treeViewNode = CITreeViewNode(item: item) - treeViewNode.parentNode = parentTreeViewNode - treeViewNodes.insert(treeViewNode, at: index) - } - - func removeTreeViewNodesAtRange(from start:Int , to end:Int) { - treeViewNodes.removeSubrange(start ... end) - } - - func setExpandTreeViewNode(atIndex index:Int) { - treeViewNodes[index].expand = true - } - - func setCollapseTreeViewNode(atIndex index:Int) { - treeViewNodes[index].expand = false - } - - func setLevelTreeViewNode(atIndex index: Int, to level: Int) { - treeViewNodes[index].level = level + 1 - } - - // MARK: Expand Rows - - func addIndexPath(withRow row: Int) { - let indexPath = IndexPath(row: row, section: 0) - indexPathsArray.append(indexPath) - } - - func expandRows(atIndexPath indexPath: IndexPath, with selectedTreeViewNode: CITreeViewNode) { - let children = self.treeViewControllerDelegate?.getChildren(for: selectedTreeViewNode.item, at: indexPath) - indexPathsArray = [IndexPath]() - var row = indexPath.row + 1 - - if (children?.count)! > 0 { - self.treeViewControllerDelegate?.willExpandTreeViewNode(selectedTreeViewNode, at: indexPath) - setExpandTreeViewNode(atIndex: indexPath.row) - } - - for item in children!{ - addIndexPath(withRow: row) - insertTreeViewNode(parent: selectedTreeViewNode, with: item, to: row) - setLevelTreeViewNode(atIndex: row, to: selectedTreeViewNode.level) - row += 1 - } - } - - // MARK: Collapse Rows - func removeIndexPath(withRow row: inout Int, and indexPath:IndexPath) { - let treeViewNode = getTreeViewNode(atIndex: row) - let children = self.treeViewControllerDelegate?.getChildren(for: treeViewNode.item, at: indexPath) - - let index = IndexPath(row: row, section: indexPath.section) - indexPathsArray.append(index) - row += 1 - - if (treeViewNode.expand) { - for _ in children!{ - removeIndexPath(withRow: &row, and: indexPath) - } - } - } - - func collapseRows(for treeViewNode: CITreeViewNode, atIndexPath indexPath: IndexPath) { - guard let treeViewControllerDelegate = self.treeViewControllerDelegate else { return } - let treeViewNodeChildren = treeViewControllerDelegate.getChildren(for: treeViewNode.item, at: indexPath) - indexPathsArray = [IndexPath]() - var row = indexPath.row + 1 - - if treeViewNodeChildren.count > 0 { - treeViewControllerDelegate.willCollapseTreeViewNode(treeViewNode, at: indexPath) - } - - setCollapseTreeViewNode(atIndex: indexPath.row) - - for _ in treeViewNodeChildren{ - removeIndexPath(withRow: &row, and: indexPath) - } - - if indexPathsArray.count > 0 { - removeTreeViewNodesAtRange(from: (indexPathsArray.first?.row)!, to: (indexPathsArray.last?.row)!) - } - } - - - @discardableResult func collapseAllRowsExceptOne() -> CITreeViewNode? { - indexPathsArray = [IndexPath]() - var collapsedTreeViewNode:CITreeViewNode? = nil - var indexPath = IndexPath(row: 0, section: 0) - for treeViewNode in treeViewNodes { - if treeViewNode.expand , treeViewNode.level == 0 { - collapseRows(for: treeViewNode, atIndexPath: indexPath) - collapsedTreeViewNode = treeViewNode - } - indexPath.row += 1 - } - return collapsedTreeViewNode - } - @discardableResult - func expandRows(atIndexPath indexPath: IndexPath, with selectedTreeViewNode: CITreeViewNode, openWithChildrens: Bool) -> Int { - guard let treeViewControllerDelegate = self.treeViewControllerDelegate else { return 0 } - let treeViewNodeChildren = treeViewControllerDelegate.getChildren(for: selectedTreeViewNode.item, at: indexPath) - indexPathsArray = [IndexPath]() - var row = indexPath.row + 1 - setExpandTreeViewNode(atIndex: indexPath.row) - - if treeViewNodeChildren.count > 0 { - treeViewControllerDelegate.willExpandTreeViewNode(selectedTreeViewNode, at: indexPath) - for item in treeViewNodeChildren { - addIndexPath(withRow: row) - insertTreeViewNode(parent: selectedTreeViewNode, with: item, to: row) - setLevelTreeViewNode(atIndex: row, to: selectedTreeViewNode.level) - if openWithChildrens { - let treeViewNode = getTreeViewNode(atIndex: row) - let indexPath = IndexPath(row: row, section: 0) - row = expandRows(atIndexPath: indexPath, with: treeViewNode, openWithChildrens: openWithChildrens) - } else { - row += 1 - } - } - } - return row - } - - func collapseAllRows(){ - indexPathsArray = [IndexPath]() - var indexPath = IndexPath(row: 0, section: 0) - for treeViewNode in treeViewNodes { - indexPath = getIndexPathOfTreeViewNode(treeViewNode: treeViewNode) - if treeViewNode.level != 0 { - setCollapseTreeViewNode(atIndex: indexPath.row) - treeViewNodes.remove(at: indexPath.row) - } else { - setCollapseTreeViewNode(atIndex: indexPath.row) - } - } - } - - func expandAllRows() { - indexPathsArray = [IndexPath]() - var indexPath = IndexPath(row: 0, section: 0) - for treeViewNode in treeViewNodes { - if !treeViewNode.expand { - indexPath = getIndexPathOfTreeViewNode(treeViewNode: treeViewNode) - indexPath.row = expandRows(atIndexPath: indexPath, with: treeViewNode, openWithChildrens: true) - - } - } - } - - func getIndexPathOfTreeViewNode(treeViewNode: CITreeViewNode) -> IndexPath { - for (index,node) in treeViewNodes.enumerated() { - if treeViewNode == node { - return IndexPath(row: index, section: 0) - } - } - return IndexPath(row:0, section:0) - } - -} diff --git a/CITreeView/CITreeView/CITreeViewClasses/CITreeViewNode.swift b/CITreeView/CITreeView/CITreeViewClasses/CITreeViewNode.swift deleted file mode 100644 index afbbb09..0000000 --- a/CITreeView/CITreeView/CITreeViewClasses/CITreeViewNode.swift +++ /dev/null @@ -1,20 +0,0 @@ -// -// CITreeViewNode.swift -// CITreeView -// -// Created by Apple on 24.01.2018. -// Copyright © 2018 Cenk Işık. All rights reserved. -// - -import UIKit - -public final class CITreeViewNode: NSObject { - public var parentNode: CITreeViewNode? - public var expand: Bool = false - public var level: Int = 0 - public var item: Any - - init(item: Any) { - self.item = item - } -} diff --git a/CITreeView/CITreeView/Controllers/ViewController.swift b/CITreeView/CITreeView/Controllers/ViewController.swift index 5123e65..a7bc5f4 100644 --- a/CITreeView/CITreeView/Controllers/ViewController.swift +++ b/CITreeView/CITreeView/Controllers/ViewController.swift @@ -34,24 +34,25 @@ class ViewController: UIViewController { } extension ViewController : CITreeViewDelegate { - func willExpandTreeViewNode(treeViewNode: CITreeViewNode, atIndexPath: IndexPath) {} - func didExpandTreeViewNode(treeViewNode: CITreeViewNode, atIndexPath: IndexPath) {} + func treeViewNode(_ treeViewNode: CITreeViewNode, willExpandAt indexPath: IndexPath) {} - func willCollapseTreeViewNode(treeViewNode: CITreeViewNode, atIndexPath: IndexPath) {} + func treeViewNode(_ treeViewNode: CITreeViewNode, didExpandAt indexPath: IndexPath) {} - func didCollapseTreeViewNode(treeViewNode: CITreeViewNode, atIndexPath: IndexPath) {} + func treeViewNode(_ treeViewNode: CITreeViewNode, willCollapseAt indexPath: IndexPath) {} + func treeViewNode(_ treeViewNode: CITreeViewNode, didCollapseAt indexPath: IndexPath) {} - func treeView(_ treeView: CITreeView, heightForRowAt indexPath: IndexPath, withTreeViewNode treeViewNode: CITreeViewNode) -> CGFloat { + + func treeView(_ treeView: CITreeView, heightForRowAt indexPath: IndexPath, with treeViewNode: CITreeViewNode) -> CGFloat { return 60 } - func treeView(_ treeView: CITreeView, didDeselectRowAt treeViewNode: CITreeViewNode, atIndexPath indexPath: IndexPath) { + func treeView(_ treeView: CITreeView, didDeselectRowAt treeViewNode: CITreeViewNode, at indexPath: IndexPath) { } - func treeView(_ treeView: CITreeView, didSelectRowAt treeViewNode: CITreeViewNode, atIndexPath indexPath: IndexPath) { + func treeView(_ treeView: CITreeView, didSelectRowAt treeViewNode: CITreeViewNode, at indexPath: IndexPath) { if let parentNode = treeViewNode.parentNode{ print(parentNode.item) } @@ -59,18 +60,19 @@ extension ViewController : CITreeViewDelegate { } extension ViewController : CITreeViewDataSource { - func treeViewSelectedNodeChildren(for treeViewNodeItem: AnyObject) -> [AnyObject] { + + func treeViewSelectedNodeChildren(for treeViewNodeItem: Any) -> [Any] { if let dataObj = treeViewNodeItem as? CITreeViewData { return dataObj.children } return [] } - func treeViewDataArray() -> [AnyObject] { + func treeViewDataArray() -> [Any] { return data } - func treeView(_ treeView: CITreeView, atIndexPath indexPath: IndexPath, withTreeViewNode treeViewNode: CITreeViewNode) -> UITableViewCell { + func treeView(_ treeView: CITreeView, cellForRowAt indexPath: IndexPath, with treeViewNode: CITreeViewNode) -> UITableViewCell { let cell = treeView.dequeueReusableCell(withIdentifier: treeViewCellIdentifier) as! CITreeViewCell let dataObj = treeViewNode.item as! CITreeViewData cell.nameLabel.text = dataObj.name @@ -78,7 +80,6 @@ extension ViewController : CITreeViewDataSource { return cell; } - } diff --git a/CITreeViewClasses/CITreeView.swift b/CITreeViewClasses/CITreeView.swift index c20d03d..240e50b 100644 --- a/CITreeViewClasses/CITreeView.swift +++ b/CITreeViewClasses/CITreeView.swift @@ -1,30 +1,29 @@ // -// TreeView.swift -// TreeViewExample +// CITreeViewController.swift +// CITreeView // -// Created by Cenk IŞIK on 11.01.2018. -// Copyright © 2018 Cenk IŞIK. All rights reserved. +// Created by Apple on 24.01.2018. +// Copyright © 2018 Cenk Işık. All rights reserved. // import UIKit @objc -public protocol CITreeViewDataSource : NSObjectProtocol{ - func treeView(_ treeView:CITreeView, atIndexPath indexPath:IndexPath, withTreeViewNode treeViewNode:CITreeViewNode) -> UITableViewCell - func treeViewSelectedNodeChildren(for treeViewNodeItem:AnyObject) -> [AnyObject] - func treeViewDataArray() -> [AnyObject] +public protocol CITreeViewDataSource: NSObjectProtocol { + func treeView(_ treeView: CITreeView, cellForRowAt indexPath: IndexPath, with treeViewNode: CITreeViewNode) -> UITableViewCell + func treeViewSelectedNodeChildren(for treeViewNodeItem: Any) -> [Any] + func treeViewDataArray() -> [Any] } @objc -public protocol CITreeViewDelegate : NSObjectProtocol{ - - func treeView(_ treeView: CITreeView, heightForRowAt indexPath: IndexPath, withTreeViewNode treeViewNode:CITreeViewNode) -> CGFloat - func treeView(_ treeView: CITreeView, didSelectRowAt treeViewNode:CITreeViewNode, atIndexPath indexPath:IndexPath) - func treeView(_ treeView: CITreeView, didDeselectRowAt treeViewNode:CITreeViewNode, atIndexPath indexPath: IndexPath) - func willExpandTreeViewNode(treeViewNode:CITreeViewNode, atIndexPath: IndexPath) - func didExpandTreeViewNode(treeViewNode:CITreeViewNode, atIndexPath: IndexPath) - func willCollapseTreeViewNode(treeViewNode:CITreeViewNode, atIndexPath: IndexPath) - func didCollapseTreeViewNode(treeViewNode:CITreeViewNode, atIndexPath: IndexPath) +public protocol CITreeViewDelegate: NSObjectProtocol { + func treeView(_ treeView: CITreeView, heightForRowAt indexPath: IndexPath, with treeViewNode: CITreeViewNode) -> CGFloat + func treeView(_ treeView: CITreeView, didSelectRowAt treeViewNode: CITreeViewNode, at indexPath: IndexPath) + func treeView(_ treeView: CITreeView, didDeselectRowAt treeViewNode: CITreeViewNode, at indexPath: IndexPath) + func treeViewNode(_ treeViewNode: CITreeViewNode, willExpandAt indexPath: IndexPath) + func treeViewNode(_ treeViewNode: CITreeViewNode, didExpandAt indexPath: IndexPath) + func treeViewNode(_ treeViewNode: CITreeViewNode, willCollapseAt indexPath: IndexPath) + func treeViewNode(_ treeViewNode: CITreeViewNode, didCollapseAt indexPath: IndexPath) } @@ -79,7 +78,7 @@ public class CITreeView: UITableView { return } - if (treeViewDataSource.treeViewDataArray()).count > treeViewController.treeViewNodes.count { + if treeViewDataSource.treeViewDataArray().count > treeViewController.treeViewNodes.count { mainDataArray = [CITreeViewNode]() treeViewController.treeViewNodes.removeAll() for item in treeViewDataSource.treeViewDataArray() { @@ -118,13 +117,13 @@ public class CITreeView: UITableView { self.performBatchUpdates({ deleteRows() }, completion: { (complete) in - treeViewDelegate.didCollapseTreeViewNode(treeViewNode: treeViewNode, atIndexPath:indexPath) + treeViewDelegate.treeViewNode(treeViewNode, didCollapseAt: indexPath) completion() }) } else { CATransaction.begin() CATransaction.setCompletionBlock({ - treeViewDelegate.didCollapseTreeViewNode(treeViewNode: treeViewNode, atIndexPath: indexPath) + treeViewDelegate.treeViewNode(treeViewNode, didCollapseAt: indexPath) completion() }) deleteRows() @@ -138,12 +137,12 @@ public class CITreeView: UITableView { self.performBatchUpdates({ insertRows() }, completion: { (complete) in - treeViewDelegate.didExpandTreeViewNode(treeViewNode: treeViewNode, atIndexPath: indexPath) + treeViewDelegate.treeViewNode(treeViewNode, didExpandAt: indexPath) }) } else { CATransaction.begin() CATransaction.setCompletionBlock({ - treeViewDelegate.didExpandTreeViewNode(treeViewNode: treeViewNode, atIndexPath: indexPath) + treeViewDelegate.treeViewNode(treeViewNode, didExpandAt: indexPath) }) insertRows() CATransaction.commit() @@ -159,10 +158,10 @@ public class CITreeView: UITableView { } return cells } + public func expandAllRows() { treeViewController.expandAllRows() reloadDataWithoutChangingRowStates() - } public func collapseAllRows() { @@ -171,11 +170,11 @@ public class CITreeView: UITableView { } } -extension CITreeView : UITableViewDelegate { +extension CITreeView: UITableViewDelegate { public func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { let treeViewNode = treeViewController.getTreeViewNode(atIndex: indexPath.row) - return (self.treeViewDelegate?.treeView(tableView as! CITreeView,heightForRowAt: indexPath,withTreeViewNode :treeViewNode))! + return (self.treeViewDelegate?.treeView(tableView as! CITreeView, heightForRowAt: indexPath, with: treeViewNode))! } public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { @@ -183,14 +182,12 @@ extension CITreeView : UITableViewDelegate { guard let treeViewDelegate = self.treeViewDelegate else { return } if let justSelectedTreeViewNode = selectedTreeViewNode { - treeViewDelegate.treeView(tableView as! CITreeView, didSelectRowAt: justSelectedTreeViewNode, atIndexPath: indexPath) + treeViewDelegate.treeView(tableView as! CITreeView, didSelectRowAt: justSelectedTreeViewNode, at: indexPath) var willExpandIndexPath = indexPath if justSelectedTreeViewNode.expand { treeViewController.collapseRows(for: justSelectedTreeViewNode, atIndexPath: indexPath) collapseRows(for: justSelectedTreeViewNode, atIndexPath: indexPath){} - } - else - { + } else { if collapseNoneSelectedRows, selectedTreeViewNode?.level == 0, let collapsedTreeViewNode = treeViewController.collapseAllRowsExceptOne(), @@ -205,8 +202,7 @@ extension CITreeView : UITableViewDelegate { self.treeViewController.expandRows(atIndexPath: willExpandIndexPath, with: justSelectedTreeViewNode, openWithChildrens: false) self.expandRows(for: justSelectedTreeViewNode, withSelected: indexPath) } - - }else{ + } else { treeViewController.expandRows(atIndexPath: willExpandIndexPath, with: justSelectedTreeViewNode, openWithChildrens: false) expandRows(for: justSelectedTreeViewNode, withSelected: indexPath) } @@ -215,27 +211,27 @@ extension CITreeView : UITableViewDelegate { } } -extension CITreeView : UITableViewDataSource { +extension CITreeView: UITableViewDataSource { public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return treeViewController.treeViewNodes.count } public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let treeViewNode = treeViewController.getTreeViewNode(atIndex: indexPath.row) - return (self.treeViewDataSource?.treeView(tableView as! CITreeView, atIndexPath: indexPath, withTreeViewNode: treeViewNode))! + return (self.treeViewDataSource?.treeView(tableView as! CITreeView, cellForRowAt: indexPath, with: treeViewNode))! } } -extension CITreeView : CITreeViewControllerDelegate { - public func getChildren(forTreeViewNodeItem item: AnyObject, with indexPath: IndexPath) -> [AnyObject] { - return (self.treeViewDataSource?.treeViewSelectedNodeChildren(for: item))! +extension CITreeView: CITreeViewControllerDelegate { + public func getChildren(for treeViewNodeItem: Any, at indexPath: IndexPath) -> [Any] { + return (self.treeViewDataSource?.treeViewSelectedNodeChildren(for: treeViewNodeItem)) ?? [] } - public func willCollapseTreeViewNode(treeViewNode: CITreeViewNode, atIndexPath: IndexPath) { - self.treeViewDelegate?.willCollapseTreeViewNode(treeViewNode: treeViewNode, atIndexPath: atIndexPath) + public func willCollapseTreeViewNode(_ treeViewNode: CITreeViewNode, at indexPath: IndexPath) { + self.treeViewDelegate?.treeViewNode(treeViewNode, willCollapseAt: indexPath) } - public func willExpandTreeViewNode(treeViewNode: CITreeViewNode, atIndexPath: IndexPath) { - self.treeViewDelegate?.willExpandTreeViewNode(treeViewNode: treeViewNode, atIndexPath: atIndexPath) + public func willExpandTreeViewNode(_ treeViewNode: CITreeViewNode, at indexPath: IndexPath) { + self.treeViewDelegate?.treeViewNode(treeViewNode, willExpandAt: indexPath) } } diff --git a/CITreeViewClasses/CITreeViewController.swift b/CITreeViewClasses/CITreeViewController.swift index 1b04874..c4e6a2e 100644 --- a/CITreeViewClasses/CITreeViewController.swift +++ b/CITreeViewClasses/CITreeViewController.swift @@ -8,30 +8,29 @@ import Foundation -public protocol CITreeViewControllerDelegate : NSObjectProtocol { - func getChildren(forTreeViewNodeItem item:AnyObject, with indexPath:IndexPath) -> [AnyObject] - func willExpandTreeViewNode(treeViewNode:CITreeViewNode, atIndexPath: IndexPath) - func willCollapseTreeViewNode(treeViewNode:CITreeViewNode, atIndexPath: IndexPath) +public protocol CITreeViewControllerDelegate: NSObjectProtocol { + func getChildren(for treeViewNodeItem: Any, at indexPath: IndexPath) -> [Any] + func willExpandTreeViewNode(_ treeViewNode: CITreeViewNode, at indexPath: IndexPath) + func willCollapseTreeViewNode(_ treeViewNode: CITreeViewNode, at indexPath: IndexPath) } -public class CITreeViewController:NSObject { +public class CITreeViewController: NSObject { - var treeViewNodes:[CITreeViewNode] = [] - var indexPathsArray:[IndexPath] = [] - weak var treeViewControllerDelegate:CITreeViewControllerDelegate? + var treeViewNodes: [CITreeViewNode] = [] + var indexPathsArray: [IndexPath] = [] + weak var treeViewControllerDelegate: CITreeViewControllerDelegate? - init(treeViewNodes : [CITreeViewNode]) { + init(treeViewNodes: [CITreeViewNode]) { self.treeViewNodes = treeViewNodes } //MARK: Tree View Nodes Functions - func addTreeViewNode(with item:AnyObject){ + func addTreeViewNode(with item: Any) { let treeViewNode = CITreeViewNode(item: item) treeViewNodes.append(treeViewNode) } - func getTreeViewNode(atIndex index: Int) -> CITreeViewNode - { + func getTreeViewNode(atIndex index: Int) -> CITreeViewNode { if treeViewNodes.indices.contains(index){ return treeViewNodes[index] } @@ -39,47 +38,45 @@ public class CITreeViewController:NSObject { } func index(of treeViewNode: CITreeViewNode) -> Int? { - return treeViewNodes.firstIndex(of: treeViewNode) + return treeViewNodes.index(of: treeViewNode) } - func insertTreeViewNode(parent parentTreeViewNode:CITreeViewNode, with item:AnyObject, to index : Int) - { + func insertTreeViewNode(parent parentTreeViewNode: CITreeViewNode, with item: Any, to index: Int) { let treeViewNode = CITreeViewNode(item: item) treeViewNode.parentNode = parentTreeViewNode treeViewNodes.insert(treeViewNode, at: index) } - func removeTreeViewNodesAtRange(from start:Int , to end:Int) - { + func removeTreeViewNodesAtRange(from start:Int , to end:Int) { treeViewNodes.removeSubrange(start ... end) } - func setExpandTreeViewNode(atIndex index:Int){ + func setExpandTreeViewNode(atIndex index:Int) { treeViewNodes[index].expand = true } - func setCollapseTreeViewNode(atIndex index:Int){ + func setCollapseTreeViewNode(atIndex index:Int) { treeViewNodes[index].expand = false } - func setLevelTreeViewNode(atIndex index:Int, to level:Int){ + func setLevelTreeViewNode(atIndex index: Int, to level: Int) { treeViewNodes[index].level = level + 1 } // MARK: Expand Rows - func addIndexPath(withRow row:Int){ - let indexPath = IndexPath(row: row , section: 0) + func addIndexPath(withRow row: Int) { + let indexPath = IndexPath(row: row, section: 0) indexPathsArray.append(indexPath) } - func expandRows(atIndexPath indexPath:IndexPath, with selectedTreeViewNode:CITreeViewNode){ - let children = self.treeViewControllerDelegate?.getChildren(forTreeViewNodeItem: selectedTreeViewNode.item, with: indexPath) + func expandRows(atIndexPath indexPath: IndexPath, with selectedTreeViewNode: CITreeViewNode) { + let children = self.treeViewControllerDelegate?.getChildren(for: selectedTreeViewNode.item, at: indexPath) indexPathsArray = [IndexPath]() var row = indexPath.row + 1 if (children?.count)! > 0 { - self.treeViewControllerDelegate?.willExpandTreeViewNode(treeViewNode: selectedTreeViewNode, atIndexPath: indexPath) + self.treeViewControllerDelegate?.willExpandTreeViewNode(selectedTreeViewNode, at: indexPath) setExpandTreeViewNode(atIndex: indexPath.row) } @@ -92,11 +89,11 @@ public class CITreeViewController:NSObject { } // MARK: Collapse Rows - func removeIndexPath(withRow row:inout Int, and indexPath:IndexPath){ + func removeIndexPath(withRow row: inout Int, and indexPath:IndexPath) { let treeViewNode = getTreeViewNode(atIndex: row) - let children = self.treeViewControllerDelegate?.getChildren(forTreeViewNodeItem: treeViewNode.item, with: indexPath) + let children = self.treeViewControllerDelegate?.getChildren(for: treeViewNode.item, at: indexPath) - let index = IndexPath(row: row , section: indexPath.section) + let index = IndexPath(row: row, section: indexPath.section) indexPathsArray.append(index) row += 1 @@ -107,14 +104,14 @@ public class CITreeViewController:NSObject { } } - func collapseRows(for treeViewNode :CITreeViewNode, atIndexPath indexPath:IndexPath){ - guard let treeViewControllerDelegate = self.treeViewControllerDelegate else {return} - let treeViewNodeChildren = treeViewControllerDelegate.getChildren(forTreeViewNodeItem: treeViewNode.item, with: indexPath) + func collapseRows(for treeViewNode: CITreeViewNode, atIndexPath indexPath: IndexPath) { + guard let treeViewControllerDelegate = self.treeViewControllerDelegate else { return } + let treeViewNodeChildren = treeViewControllerDelegate.getChildren(for: treeViewNode.item, at: indexPath) indexPathsArray = [IndexPath]() var row = indexPath.row + 1 if treeViewNodeChildren.count > 0 { - treeViewControllerDelegate.willCollapseTreeViewNode(treeViewNode: treeViewNode, atIndexPath: indexPath) + treeViewControllerDelegate.willCollapseTreeViewNode(treeViewNode, at: indexPath) } setCollapseTreeViewNode(atIndex: indexPath.row) @@ -122,14 +119,14 @@ public class CITreeViewController:NSObject { for _ in treeViewNodeChildren{ removeIndexPath(withRow: &row, and: indexPath) } + if indexPathsArray.count > 0 { removeTreeViewNodesAtRange(from: (indexPathsArray.first?.row)!, to: (indexPathsArray.last?.row)!) } - } - @discardableResult func collapseAllRowsExceptOne() -> CITreeViewNode?{ + @discardableResult func collapseAllRowsExceptOne() -> CITreeViewNode? { indexPathsArray = [IndexPath]() var collapsedTreeViewNode:CITreeViewNode? = nil var indexPath = IndexPath(row: 0, section: 0) @@ -143,16 +140,16 @@ public class CITreeViewController:NSObject { return collapsedTreeViewNode } @discardableResult - func expandRows(atIndexPath indexPath:IndexPath, with selectedTreeViewNode:CITreeViewNode, openWithChildrens:Bool) -> Int{ - guard let treeViewControllerDelegate = self.treeViewControllerDelegate else {return 0} - let treeViewNodeChildren = treeViewControllerDelegate.getChildren(forTreeViewNodeItem: selectedTreeViewNode.item, with: indexPath) + func expandRows(atIndexPath indexPath: IndexPath, with selectedTreeViewNode: CITreeViewNode, openWithChildrens: Bool) -> Int { + guard let treeViewControllerDelegate = self.treeViewControllerDelegate else { return 0 } + let treeViewNodeChildren = treeViewControllerDelegate.getChildren(for: selectedTreeViewNode.item, at: indexPath) indexPathsArray = [IndexPath]() var row = indexPath.row + 1 setExpandTreeViewNode(atIndex: indexPath.row) if treeViewNodeChildren.count > 0 { - treeViewControllerDelegate.willExpandTreeViewNode(treeViewNode: selectedTreeViewNode, atIndexPath: indexPath) - for item in treeViewNodeChildren{ + treeViewControllerDelegate.willExpandTreeViewNode(selectedTreeViewNode, at: indexPath) + for item in treeViewNodeChildren { addIndexPath(withRow: row) insertTreeViewNode(parent: selectedTreeViewNode, with: item, to: row) setLevelTreeViewNode(atIndex: row, to: selectedTreeViewNode.level) @@ -160,10 +157,9 @@ public class CITreeViewController:NSObject { let treeViewNode = getTreeViewNode(atIndex: row) let indexPath = IndexPath(row: row, section: 0) row = expandRows(atIndexPath: indexPath, with: treeViewNode, openWithChildrens: openWithChildrens) - }else { + } else { row += 1 } - } } return row @@ -174,10 +170,10 @@ public class CITreeViewController:NSObject { var indexPath = IndexPath(row: 0, section: 0) for treeViewNode in treeViewNodes { indexPath = getIndexPathOfTreeViewNode(treeViewNode: treeViewNode) - if treeViewNode.level != 0 { + if treeViewNode.level != 0 { setCollapseTreeViewNode(atIndex: indexPath.row) treeViewNodes.remove(at: indexPath.row) - }else{ + } else { setCollapseTreeViewNode(atIndex: indexPath.row) } } @@ -195,7 +191,7 @@ public class CITreeViewController:NSObject { } } - func getIndexPathOfTreeViewNode(treeViewNode:CITreeViewNode) -> IndexPath { + func getIndexPathOfTreeViewNode(treeViewNode: CITreeViewNode) -> IndexPath { for (index,node) in treeViewNodes.enumerated() { if treeViewNode == node { return IndexPath(row: index, section: 0) diff --git a/CITreeViewClasses/CITreeViewNode.swift b/CITreeViewClasses/CITreeViewNode.swift index 99a72ac..afbbb09 100644 --- a/CITreeViewClasses/CITreeViewNode.swift +++ b/CITreeViewClasses/CITreeViewNode.swift @@ -9,12 +9,12 @@ import UIKit public final class CITreeViewNode: NSObject { - public var parentNode:CITreeViewNode? - public var expand:Bool = false - public var level:Int = 0 - public var item:AnyObject + public var parentNode: CITreeViewNode? + public var expand: Bool = false + public var level: Int = 0 + public var item: Any - init(item:AnyObject) { + init(item: Any) { self.item = item } } From 8e7028cf5d6e7be461310ad7ff7ccbf9077c3aaa Mon Sep 17 00:00:00 2001 From: Roman Bobryk Date: Fri, 16 Sep 2022 02:33:29 +0200 Subject: [PATCH 2/2] NSObjectProtocol inheritance was removed --- CITreeViewClasses/CITreeView.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CITreeViewClasses/CITreeView.swift b/CITreeViewClasses/CITreeView.swift index 240e50b..10ed352 100644 --- a/CITreeViewClasses/CITreeView.swift +++ b/CITreeViewClasses/CITreeView.swift @@ -9,14 +9,14 @@ import UIKit @objc -public protocol CITreeViewDataSource: NSObjectProtocol { +public protocol CITreeViewDataSource { func treeView(_ treeView: CITreeView, cellForRowAt indexPath: IndexPath, with treeViewNode: CITreeViewNode) -> UITableViewCell func treeViewSelectedNodeChildren(for treeViewNodeItem: Any) -> [Any] func treeViewDataArray() -> [Any] } @objc -public protocol CITreeViewDelegate: NSObjectProtocol { +public protocol CITreeViewDelegate { func treeView(_ treeView: CITreeView, heightForRowAt indexPath: IndexPath, with treeViewNode: CITreeViewNode) -> CGFloat func treeView(_ treeView: CITreeView, didSelectRowAt treeViewNode: CITreeViewNode, at indexPath: IndexPath) func treeView(_ treeView: CITreeView, didDeselectRowAt treeViewNode: CITreeViewNode, at indexPath: IndexPath)