我正在尝试创建层次结构视图。单击每个人后,视图应展开和收缩

Posted

技术标签:

【中文标题】我正在尝试创建层次结构视图。单击每个人后,视图应展开和收缩【英文标题】:I am trying to create a heirarchy view. The view should expand and contract once clicked on each person 【发布时间】:2021-04-30 21:45:17 【问题描述】:

当点击每个人时,该人的下属列表应该出现在底部。整个列表是动态的。


        "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": []
                            
                        ]
                    
                ]
            
        ]
    

这是要使用的 json。我已经尝试在表格视图中使用集合视图。但是当我尝试删除一行时,当用户移动到顶部并单击一个新人时失败了。我已经看到许多库显示表视图的树结构。但我认为不能在这里使用。

这是我迄今为止尝试过的。

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()
        
        
    

【问题讨论】:

你有什么问题? trailingSwipeActionsConfigurationForRowAt - 您可以使用此委托方法禁用 tableViewCells 的滑动操作。 当前展开 f.e. 时应该如何表现Bent Grasha(有 f.e. 5 个下属)而你选择了 Brigida Withey?前一个应该崩溃吗?还是应该通过保留先前的选择来扩展第二个?如果是,用户界面应该是什么样子?没有空间! 【参考方案1】:

声明4个变量,

var heirarchy : Subordinates?
var numOfRows = 0
var subordinatesList : [Subordinates]?
var subList = [[Subordinates]?]()

一旦你得到 json 响应,

self.numOfRows += 1
self.subordinatesList?.append(self.heirarchy!)
self.subList.append([self.heirarchy!])

为collection view item click创建一个委托函数,如下所示。

func employeeClicked(row: Int?, index: Int?, subordinates: [Subordinates]?) 

    if (subordinates?.count ?? 0) > 0 
    self.subordinatesList = subordinates
    if numOfRows > row! + 2 
        self.tableView.beginUpdates()
        for i in (row! + 1)..<tableView.numberOfRows(inSection: 0) 
            self.tableView.deleteRows(at: [IndexPath(row: i, section: 0)], with: .fade)
            self.numOfRows = numOfRows - 1
            self.subList.removeLast()
            
        
        self.subList.append(self.subordinatesList)
        self.numOfRows = row! + 2
        self.tableView.insertRows(at: [IndexPath(row: row! + 1, section: 0)], with: .fade)
        self.tableView.endUpdates()
    
    else if numOfRows == row! + 2 
        self.subList[row! + 1] = self.subordinatesList
        self.tableView.reloadRows(at: [IndexPath(row: row! + 1, section: 0)], with: .fade)
    else 
        self.subList.append(self.subordinatesList)
    self.numOfRows = row! + 2
    self.tableView.insertRows(at: [IndexPath(row: row! + 1, section: 0)], with: .fade)
    
    else 
        if numOfRows > row! + 1 
            self.tableView.beginUpdates()
            for i in (row! + 1)..<tableView.numberOfRows(inSection: 0) 
                self.tableView.deleteRows(at: [IndexPath(row: i, section: 0)], with: .fade)
                self.numOfRows = numOfRows - 1
                self.subList.removeLast()
                
            
            self.tableView.endUpdates()
        
    
    self.tableView.scrollToBottom()


在表格视图单元格中,行委托使用子列表数组的值。 希望这可以帮助你。我检查了代码,它对我来说工作正常。

【讨论】:

谢谢伙计,你拯救了我的一天。完美的解决方案。

以上是关于我正在尝试创建层次结构视图。单击每个人后,视图应展开和收缩的主要内容,如果未能解决你的问题,请参考以下文章

Android中的错误“只有创建视图层次结构的原始线程才能触摸其视图”[重复]

致命例外:JavaBridge - 只有创建视图层次结构的原始线程才能接触其视图

即使在添加子视图之后,视图层次结构也没有为约束做好准备

视图不在窗口层次结构错误中

在 Drupal 中使用显示层次结构值的分类参数创建视图

警告:尝试显示不在窗口层次结构中的视图!迅速