RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1095118
Accepted
Moskwinow
Moskwinow
Asked:2020-03-16 04:32:10 +0000 UTC2020-03-16 04:32:10 +0000 UTC 2020-03-16 04:32:10 +0000 UTC

UITableView 创建部分的问题

  • 772

我有一个单一的音调,当用户选择产品时写入数据,之后我将此数据传递到购物车并显示它

''' 导入 UIKit

最后一类 BasketModel {

static let shared = BasketModel()
var records: [Products] = []

private init() {}

func addProducts(_ product: Products) {
    self.records.append(product)

}

func clearProducts() {
    self.records = []
}

}

结构产品{

let img: UIImage
let name: String
let price: Int
let type: String

}'''

我有三种产品(菜肴、浇头、饮料)我想用这样的数据创建 3 个部分菜肴、浇头、饮料这里是我的表格代码

''' 导入 UIKit

类 BasketVC: UIViewController {

@IBOutlet weak var fullBasketview: UIView!
@IBOutlet weak var bottomBasketView: UIView!

@IBOutlet weak var choiceBtn: UIButton!
@IBOutlet weak var basketTableView: UITableView!

@IBOutlet weak var totalPriceLabel: UILabel!

@IBOutlet weak var orderButton: UIButton!

var presenter = false
var totalPrice = 0

var sections: [String] = ["Блюда","Топпинги","Наппитки"]
var product = [BasketModel.shared.records]

override func viewDidLoad() {
    super.viewDidLoad()

    choiceBtn.layer.cornerRadius = 20
    choiceBtn.layer.masksToBounds = true
    basketTableView.delegate = self
    basketTableView.dataSource = self
    orderButton.layer.cornerRadius = 20
    orderButton.layer.masksToBounds = true

    if !BasketModel.shared.records.isEmpty {

        fullBasketview.isHidden = false

        for item in BasketModel.shared.records {
            totalPrice += item.price
            totalPriceLabel.text = "\(totalPrice) Руб."
        }


    } else {

        fullBasketview.isHidden = true
    }

}

@IBAction func unwindBasketVC(for unwindSegue: UIStoryboardSegue) {}

}

扩展 BasketVC: UITableViewDelegate, UITableViewDataSource {

func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    return sections[section]

}

func numberOfSections(in tableView: UITableView) -> Int {
    return sections.count
}


func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return product[section].count
}


func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "BasketCell", for: indexPath) as! BasketCell


    cell.basketImg.image = product[indexPath.section][indexPath.row].img
    cell.basketName.text = product[indexPath.section][indexPath.row].name
    cell.basketPrice.text = "\(product[indexPath.section][indexPath.row].price) Руб."

    return cell
}

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {

    if editingStyle == .delete {
        BasketModel.shared.records.remove(at: indexPath.row)
        tableView.deleteRows(at: [indexPath], with: .automatic)
        totalPrice = 0
        for item in BasketModel.shared.records {
            totalPrice += item.price
            totalPriceLabel.text = "\(totalPrice) Руб."
        }
    }
    if BasketModel.shared.records.isEmpty {
        fullBasketview.isHidden = true 
    }
}


func  tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    tableView.deselectRow(at: indexPath, animated: true)
}

}

'''

在我去购物车后,错误出现在这里 ''' func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return product[section].count -> Fatal error: Index out of range
}

'''

请帮帮我

swift
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    schmidt9
    2020-03-16T14:04:12Z2020-03-16T14:04:12Z

    您在其中显示部分和产品的逻辑存在差异 - 您有 3 个部分,但在这里它将var product = [BasketModel.shared.records] product只包含一个嵌套数组,其中包含所有产品而没有划分为部分

    如果您的产品位于一个数组中(假设其中有 10 个,并且它们用于不同的部分),那么您首先需要根据某些属性对它们进行排序,例如type(将什么归于菜肴、浇头等)

    struct Product {
    
        let img: UIImage
        let name: String
        let price: Int
        let type: String
    
    }
    
    var productsList = BasketModel.shared.records
    var sections: [String] = ["Блюда","Топпинги","Напитки"]
    var sectionedProducts: [[Product]] = []
    
    // пусть type будет содержать имя секции
    sections.forEach { section in
        let itemsInSection = productsList.filter { $0.type == section }
        sectionedProducts.append(itemsInSection)
    }
    
    // ...
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    
        return sectionedProducts[section].count
    }
    
    • 0

相关问题

  • DataSource 不会在 CollectionView.reloadData() 上触发

  • 无法开启定时器

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何从列表中打印最大元素(str 类型)的长度?

    • 2 个回答
  • Marko Smith

    如何在 PyQT5 中清除 QFrame 的内容

    • 1 个回答
  • Marko Smith

    如何将具有特定字符的字符串拆分为两个不同的列表?

    • 2 个回答
  • Marko Smith

    导航栏活动元素

    • 1 个回答
  • Marko Smith

    是否可以将文本放入数组中?[关闭]

    • 1 个回答
  • Marko Smith

    如何一次用多个分隔符拆分字符串?

    • 1 个回答
  • Marko Smith

    如何通过 ClassPath 创建 InputStream?

    • 2 个回答
  • Marko Smith

    在一个查询中连接多个表

    • 1 个回答
  • Marko Smith

    对列表列表中的所有值求和

    • 3 个回答
  • Marko Smith

    如何对齐 string.Format 中的列?

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5