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

如何解决我正在尝试创建一个层次结构视图单击每个人后,视图应扩展和收缩

enter image description here

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

{
        "EmployeeId": "1","Name": "John","Position": "HR","Image": "","SubordinateCount": 6,"Subordinates": [
            {
                "EmployeeId": "2","Name": "Sub john 1","Position": "Manager","SubordinateCount": 1,"Subordinates": [
                    {
                        "EmployeeId": "3","Name": "Joseph","Position": "Admin","Subordinates": [
                            {
                                "EmployeeId": "4","Name": "Raj","Position": "Software Developer","SubordinateCount": 0,"Subordinates": []
                            }
                        ]
                    }
                ]
            },{
                "EmployeeId": "5","Name": "Rahul","Position": "ERP Consultant","SubordinateCount": 16,"Subordinates": [
                    {
                        "EmployeeId": "6","Name": "Fam","Position": "QA","Image": null,"Subordinates": []
                    },{
                        "EmployeeId": "7","Name": "Salman A Q",{
                        "EmployeeId": "8","Name": "Mac",{
                        "EmployeeId": "9","Name": "Mathew",{
                        "EmployeeId": "10","Name": "Kim",{
                        "EmployeeId": "11","Name": "Loren",{
                        "EmployeeId": "12","Name": "Adam",{
                        "EmployeeId": "13","Name": "Meera",{
                        "EmployeeId": "14","Name": "MMM",{
                        "EmployeeId": "15","Name": "Master",{
                        "EmployeeId": "16","Name": "Michael",{
                        "EmployeeId": "17","Name": "George","Position": "Consultant",{
                        "EmployeeId": "18","Name": "Ahmedu A F",{
                        "EmployeeId": "19","Name": "KKKK",{
                        "EmployeeId": "20","Name": "xxx",{
                        "EmployeeId": "21","Name": "DK","Subordinates": []
                    }
                ]
            },{
                "EmployeeId": "22","Name": "HHHH","Position": "Engineer","Subordinates": [
                    {
                        "EmployeeId": "23","Name": "Ar","Position": "Technical",{
                "EmployeeId": "24","Name": "Sun","Subordinates": [
                    {
                        "EmployeeId": "25","Name": "AAAA","Position": null,{
                "EmployeeId": "26","Name": "CCCC","Subordinates": []
            },{
                "EmployeeId": "27","Name": "Jaaaa","SubordinateCount": 2,"Subordinates": [
                    {
                        "EmployeeId": "28","Name": "Jay","Position": "Ssssss",{
                        "EmployeeId": "29","Name": "NNNN","Position": "Sssss","Subordinates": [
                            {
                                "EmployeeId": "30","Name": "Jo","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,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,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,with: .fade)
                }
            }
            self.Extableview.endUpdates()
        }
        }
    }
}

解决方法

声明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!])

为集合视图项单击创建一个委托函数,如下所示。

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,with: .fade)
        self.tableView.endUpdates()
    }
    else if numOfRows == row! + 2 {
        self.subList[row! + 1] = self.subordinatesList
        self.tableView.reloadRows(at: [IndexPath(row: row! + 1,with: .fade)
    }else {
        self.subList.append(self.subordinatesList)
    self.numOfRows = row! + 2
    self.tableView.insertRows(at: [IndexPath(row: row! + 1,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,with: .fade)
                self.numOfRows = numOfRows - 1
                self.subList.removeLast()
                
            }
            self.tableView.endUpdates()
        }
    }
    self.tableView.scrollToBottom()
}
}

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res