When clicked on each person , the subordinates list of that person appears at the bottom. The whole list is dynamic .
{ "EmployeeId": "1", "Name": "John", "Position": "HR", "Image": "", "SubordinateCount": 6, "Subordinates": [ { "EmployeeId": "2", "Name": "Sub john 1", "Position": "Manager", "Image": "", "SubordinateCount": 1, "Subordinates": [ { "EmployeeId": "3", "Name": "Joseph", "Position": "Admin", "Image": "", "SubordinateCount": 1, "Subordinates": [ { "EmployeeId": "4", "Name": "Raj", "Position": "Software Developer", "Image": "", "SubordinateCount": 0, "Subordinates": [] } ] } ] }, { "EmployeeId": "5", "Name": "Rahul", "Position": "ERP Consultant", "Image": "", "SubordinateCount": 16, "Subordinates": [ { "EmployeeId": "6", "Name": "Fam", "Position": "QA", "Image": null, "SubordinateCount": 0, "Subordinates": [] }, { "EmployeeId": "7", "Name": "Salman A Q", "Position": "Software Developer", "Image": null, "SubordinateCount": 0, "Subordinates": [] }, { "EmployeeId": "8", "Name": "Mac", "Position": "Software Developer", "Image": null, "SubordinateCount": 0, "Subordinates": [] }, { "EmployeeId": "9", "Name": "Mathew", "Position": "QA", "Image": null, "SubordinateCount": 0, "Subordinates": [] }, { "EmployeeId": "10", "Name": "Kim", "Position": "QA", "Image": null, "SubordinateCount": 0, "Subordinates": [] }, { "EmployeeId": "11", "Name": "Loren", "Position": "Software Developer", "Image": "", "SubordinateCount": 0, "Subordinates": [] }, { "EmployeeId": "12", "Name": "Adam", "Position": "QA", "Image": null, "SubordinateCount": 0, "Subordinates": [] }, { "EmployeeId": "13", "Name": "Meera", "Position": "QA", "Image": null, "SubordinateCount": 0, "Subordinates": [] }, { "EmployeeId": "14", "Name": "MMM", "Position": "QA", "Image": null, "SubordinateCount": 0, "Subordinates": [] }, { "EmployeeId": "15", "Name": "Master", "Position": "QA", "Image": null, "SubordinateCount": 0, "Subordinates": [] }, { "EmployeeId": "16", "Name": "Michael", "Position": "QA", "Image": null, "SubordinateCount": 0, "Subordinates": [] }, { "EmployeeId": "17", "Name": "George", "Position": "Consultant", "Image": null, "SubordinateCount": 0, "Subordinates": [] }, { "EmployeeId": "18", "Name": "Ahmedu A F", "Position": "QA", "Image": null, "SubordinateCount": 0, "Subordinates": [] }, { "EmployeeId": "19", "Name": "KKKK", "Position": "QA", "Image": null, "SubordinateCount": 0, "Subordinates": [] }, { "EmployeeId": "20", "Name": "xxx", "Position": "QA", "Image": null, "SubordinateCount": 0, "Subordinates": [] }, { "EmployeeId": "21", "Name": "DK", "Position": "QA", "Image": null, "SubordinateCount": 0, "Subordinates": [] } ] }, { "EmployeeId": "22", "Name": "HHHH", "Position": "Engineer", "Image": "", "SubordinateCount": 1, "Subordinates": [ { "EmployeeId": "23", "Name": "Ar", "Position": "Technical", "Image": "", "SubordinateCount": 0, "Subordinates": [] } ] }, { "EmployeeId": "24", "Name": "Sun", "Position": "Software Developer", "Image": null, "SubordinateCount": 1, "Subordinates": [ { "EmployeeId": "25", "Name": "AAAA", "Position": null, "Image": null, "SubordinateCount": 0, "Subordinates": [] } ] }, { "EmployeeId": "26", "Name": "CCCC", "Position": "Consultant", "Image": null, "SubordinateCount": 0, "Subordinates": [] }, { "EmployeeId": "27", "Name": "Jaaaa", "Position": "Software Developer", "Image": null, "SubordinateCount": 2, "Subordinates": [ { "EmployeeId": "28", "Name": "Jay", "Position": "Ssssss", "Image": null, "SubordinateCount": 0, "Subordinates": [] }, { "EmployeeId": "29", "Name": "NNNN", "Position": "Sssss", "Image": null, "SubordinateCount": 1, "Subordinates": [ { "EmployeeId": "30", "Name": "Jo", "Position": "Engineer", "Image": null, "SubordinateCount": 0, "Subordinates": [] } ] } ] } ] } This is the json to be used .I have tried with collection view inside table view.But failed when i try to delete a row when user moves to the top and clicks on a new person . I have seen many libraries showing tree structure for table view . But i think that cannot be used here .
This is what i have tried so far.
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return selectedIndexes.count + 1 } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { var bottomCell : SubordinatesTableViewCell! = self.Extableview.dequeueReusableCell(withIdentifier: "SubordinatesTableViewCell") as? SubordinatesTableViewCell if bottomCell == nil { let nib:Array = Bundle.main.loadNibNamed("SubordinatesTableViewCell", owner: self, options: nil)! bottomCell = nib[0] as? SubordinatesTableViewCell } bottomCell.empLevel = indexPath.row bottomCell.delegate = self bottomCell.subordinateDetails = self.subordinatesList return bottomCell } extension CurrentVC : SubordinateCellDelegate { func employeeClicked(row: Int?, index: Int?) { self.subordinatesList = self.heirarchy?.subordinates self.currentHeirarchyLevel = row! + 1 if self.Extableview.numberOfRows(inSection: 0) > row! + 1 { var newIndexes = [Int]() if row! == 0 { self.selectedIndexes.removeAll() self.selectedIndexes.append(index!) }else { for i in 0..<(row! + 1) { newIndexes.append(selectedIndexes[i]) } self.selectedIndexes = newIndexes self.selectedIndexes.append(index!) } for i in 0..<row! + 1 { self.subordinatesList = self.subordinatesList?[self.selectedIndexes[i]].subordinates print(subordinatesList) } if subordinatesList?.count ?? 0 > 0 { self.Extableview.reloadRows(at: [IndexPath(row: self.currentHeirarchyLevel, section: 0)], with: .fade) }else { for i in 0..<self.Extableview.numberOfRows(inSection: 0) { if i > row! { self.Extableview.beginUpdates() self.Extableview.deleteRows(at: [IndexPath(row: 1, section: 0)], with: .fade) } } self.numOfsections = row! + 1 self.Extableview.endUpdates() } }else { self.selectedIndexes.append(index!) for i in 0..<row! + 1 { self.subordinatesList = self.subordinatesList?[self.selectedIndexes[i]].subordinates } if self.subordinatesList?.count ?? 0 > 0 { self.Extableview.beginUpdates() self.numOfsections = row! + 2 self.Extableview.insertRows(at: [IndexPath(row: row! + 1, section: 0)], with: .none) self.Extableview.endUpdates() }else { for i in 0..<self.Extableview.numberOfRows(inSection: 0) { if i > row! { self.Extableview.beginUpdates() self.numOfsections = row! + 1 self.Extableview.deleteRows(at: [IndexPath(row: 1, section: 0)], with: .fade) } } self.Extableview.endUpdates() } } } } https://stackoverflow.com/questions/65912688/i-am-trying-to-create-a-heirarchy-view-the-view-should-expand-and-contract-onc January 27, 2021 at 11:55AM

没有评论:
发表评论