微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 iOS Swift 中将嵌套 json 中的值解析为具有多个标签的 tableview 单元格

如何解决如何在 iOS Swift 中将嵌套 json 中的值解析为具有多个标签的 tableview 单元格

我有一个带有多个标签单元格的 tableView。具有细胞样,set-1 variableName1,variablevalue1 & set-2 variableName2,variablevalue2。这里的所有数据都将从 JSON 响应中获取包括标题标签

我已将所有值存储到模型中并在 tableView 中显示一些数据。但我无法单独显示多个标签值。

这是我的多个标签的 JSON 结构:

    "_embedded": {
                "variable": [
                    {
                        "_links": {
                            "self": {
                                "href": ""
                            }
                        },"_embedded": null,"name": "startedBy","value": "Preethi","type": "String","valueInfo": {}
                    },{
                        "_links": {
                            "self": {
                                "href": ""
                            }
                        },"name": "LoanAmount","value": "1500000","valueInfo": {}
                    }
                ]
            },

在这里,我试图显示 variable 数组中的值 -> 名称和值。

到目前为止尝试过:

       for val in (t._embedded?.variable)!{
        
        print("val name",val.name ?? "")
        print("val name",val.value ?? "")
        

        
        if val.name == val.name {

            cell.variableName1.text = val.name
            cell.variablevalue1.text = val.value
        }


        if val.value == val.value {

            cell.variableName2.text = val.name
            cell.variablevalue2.text = val.value

        }
    }

这里是 tableView 单元格的图像:

enter image description here

非常感谢任何帮助...

解决方法

您可以在 CollectionView 中使用 TableView

import UIKit

class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource,UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout {

//MARK: - Variable Declaration
let arryOfData = [["name": "startedBy","value": "Preethi"],["name": "LoanAmount","value": "1500000"]]
//MARK: - IBOutlet
@IBOutlet weak var tblView:UITableView!
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
}

// MARK: - UITableview DELEGATE AND DATASOURCE
func numberOfSections(in tableView: UITableView) -> Int {
    return 1 // If you more data than use dynamic count set
}
func tableView(_ tableView: UITableView,numberOfRowsInSection section: Int) -> Int {
    return 1
}
func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tblView.dequeueReusableCell(withIdentifier: "Cell",for: indexPath) as! ListCell
    cell.clcView.reloadData()
    return cell
}

// MARK: - UICOLLECTION DELEGATE AND DATASOURCE
func collectionView(_ collectionView: UICollectionView,numberOfItemsInSection section: Int) -> Int {
    return self.arryOfData.count
}
func collectionView(_ collectionView: UICollectionView,cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "collectionCell",for: indexPath)
    let lblName = cell.viewWithTag(101) as! UILabel
    let lblValue = cell.viewWithTag(102) as! UILabel
    lblName.layer.borderWidth = 1
    lblName.layer.borderColor = UIColor.lightGray.cgColor
    lblValue.layer.borderWidth = 1
    lblValue.layer.borderColor = UIColor.lightGray.cgColor
    let dict = self.arryOfData[indexPath.row]
    lblName.text = dict["name"] ?? ""
    lblValue.text = dict["value"] ?? ""
    return cell
}
func collectionView(_ collectionView: UICollectionView,layout collectionViewLayout: UICollectionViewLayout,sizeForItemAt indexPath: IndexPath) -> CGSize {
    let spacing:CGFloat = 10
    let numberOfItemsPerRow:CGFloat = 2
    let spacingBetweenCells:CGFloat = 10
    let totalSpacing = (2 * spacing) + ((numberOfItemsPerRow) * spacingBetweenCells)
    let productWidth = (collectionView.bounds.width - totalSpacing)/numberOfItemsPerRow
    return CGSize(width: productWidth,height: 110)
    
   }
}

class ListCell: UITableViewCell {
    //MARK: - Variable Declaration
    
    //MARK: - IBOutlet
    @IBOutlet weak var clcView:UICollectionView!
    
    //MARK: - LifeCycle
    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }
    //MARK: - IBAction

 }

your output

,
for val in (t._embedded?.variable)!{
    

    if val.name == val.name {

        cell.variableName1.text = val.name
        cell.variablevalue1.text = val.value
    }


    if val.value == val.value {

        cell.variableName2.text = val.name
        cell.variablevalue2.text = val.value

    }
}

如果你比较 val.name == val.name 它总是返回 true 所以你需要像这样修改 val.name == "startedBy" 和 value val.value == "1500000" 显示json的第一项和第二项。

无论如何你在哪里调用for循环? 我认为您想在唯一的单元格中显示 json 的每个项目,因此您需要将 json 解析为字典并在 CollectionViewDataSource 的“cellForItemAt”函数中使用它

,

关于您真正想要什么的信息很少,但也许这会有所帮助。

案例 1

我觉得你的 json 可能没有正确定义。如果是,那么它似乎是说您将只有一组两个变量,那么您就不需要 >>> a,b,c=1,2,3 >>> a,c = 'hi','U',3 # okay >>> a,c = [1],[2,3],3 # okay >>> a,c = {1},{2},3 # it's set() ,因为只有一个单元格,这样您只需添加一个即可完成UITableView 到您当前的视图。

如果你:

  • 在 json 中总是只有两个变量
  • 想在一个单元格中显示他们的内容
  • 正在使用 UITableView

UIView,您可以

cellForRow(at:)

案例 2

如果您的 json 定义正确,但您将有两个以上的变量,并且您希望每行显示两个,那么我建议您使用 func cellForRow(at indexPath: IndexPath) -> UITableViewCell { guard let cell = self.dequeueReusableCell(withReuseIdentifier: "collectionCell",for: indexPath) else { return UITableViewCell() } for val in (t._embedded?.variable)! { // The if you had here is always true cell.variableName1.text = val.name cell.variablevalue1.text = val.value cell.variableName2.text = val.name cell.variablevalue2.text = val.value } } return cell } 并让您的单元格每个和每个单元格的大小都占屏幕的一半一个你显示正确索引的值。像这样:

UICollectionViewCell

案例 3

如果这些都不是您想要解决的情况,请告诉我们,以便我们更好地为您提供帮助。

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