Tableview 多节行数错误
Posted
技术标签:
【中文标题】Tableview 多节行数错误【英文标题】:Tableview Multi-Sections Number of Rows Error 【发布时间】:2020-04-04 07:13:42 【问题描述】:我有以下四个产品列表:
var products1 = [Product]()
var products2 = [Product]()
var products3 = [Product]()
var products4 = [Product]()
我想要一个包含多个部分的 tableView,包括标题。添加标题没有错误,我没有问题;但是当它到达 numberofrows 时,它会给我一个错误。
这是我的numberOfSections
:
func numberOfSections(in tableView: UITableView) -> Int
var numberOfSections:Int = 1
if orderDetails.status == DatabaseRef.Order_Received
numberOfSections = 1
else
if orderDetails.status == DatabaseRef.Picking
numberOfSections = 2
else
if orderDetails.status == DatabaseRef.ReadyForDelivery || orderDetails.status == DatabaseRef.OnTheWay || orderDetails.status == DatabaseRef.Delivered
numberOfSections = 4
return numberOfSections
基本上基于订单的状态;我想要不同数量的部分(1 个部分、2 个部分或 4 个部分)。但我不断收到超出范围的错误。这就是我编码行数的方式:
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
var numberOfRows = 0
if orderDetails.status == DatabaseRef.Order_Received
numberOfRows = products1.count
else
if orderDetails.status == DatabaseRef.Picking
if section == 0
numberOfRows = products1.count
else
if section == 1
numberOfRows = products2.count
else
if orderDetails.status == DatabaseRef.ReadyForDelivery || orderDetails.status == DatabaseRef.OnTheWay || orderDetails.status == DatabaseRef.Delivered
if section == 0
numberOfRows = products1.count
else
if section == 1
numberOfRows = products2.count
else
if section == 2
numberOfRows = products3.count
else
if section == 3
numberOfRows = products4.count
return numberOfRows
这是我的cellForRoaAt
:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
if let cell = tableView.dequeueReusableCell(withIdentifier: Identifiers.MyOrderCartCell, for: indexPath) as? MyOrderCartCell
if orderDetails.status == DatabaseRef.Order_Received
if indexPath.section == 0
cell.configureCell(order: orderDetails, product: products1[indexPath.row], delegate: self)
else
if orderDetails.status == DatabaseRef.Picking
if indexPath.section == 0
cell.configureCell(order: orderDetails, product: products1[indexPath.row], delegate: self)
else
if indexPath.section == 1
cell.configureCell(order: orderDetails, product: products2[indexPath.row], delegate: self)
else
if orderDetails.status == DatabaseRef.ReadyForDelivery || orderDetails.status == DatabaseRef.OnTheWay || orderDetails.status == DatabaseRef.Delivered
if indexPath.section == 0
cell.configureCell(order: orderDetails, product: products1[indexPath.row], delegate: self)
else
if indexPath.section == 1
cell.configureCell(order: orderDetails, product: products2[indexPath.row], delegate: self)
else
if indexPath.section == 2
cell.configureCell(order: orderDetails, product: products3[indexPath.row], delegate: self)
else
if indexPath.section == 3
cell.configureCell(order: orderDetails, product: products4[indexPath.row], delegate: self)
我在这里做错了什么?错误信息是:
Invalid update: invalid number of rows in section 1. The number of rows contained in an existing section after the update (1) must be equal to the number of rows contained in that section before the update (0), plus or minus the number of rows inserted or deleted from that section (0 inserted, 0 deleted) and plus or minus the number of rows moved into or out of that section (0 moved in, 0 moved out).
【问题讨论】:
为什么不使用一个带有状态字段的产品数组?它使您的方法变得容易。 一个订单的产品数量太多,所以在Product数组中为每个产品设置一个批准状态是不可行的。 【参考方案1】:我发现上面的代码没有问题。我在其他地方遇到问题,将产品更新/添加到我没有添加到正确部分的表视图中。它只添加到第 0 节。所以上面的代码是正确的。
【讨论】:
以上是关于Tableview 多节行数错误的主要内容,如果未能解决你的问题,请参考以下文章
每次我重新加载 tableview 部分时 UITableView 都不会向上滚动