小编Sim*_*one的帖子

Tableview 中的 CollectionView,数据源错误

我有一个 uiviewcontroller,我在其中放置了一个带有自定义单元格的 uitableview。这些单元格中的每一个都在一个 uicollectionview 中,并带有水平滚动条。

我以编程方式工作,所以 tableviewcell 是 collectionview 的委托/数据源。

我的数据源的结构,是一个阵列阵列

我的 tableview 对于每个 tableviewcell 都有一个 tableview section.Tableview 数据源方法使用array没有问题。我能够正确设置 tableview。在这个单元格内,我想显示一个带有水平滚动的集合视图。

我遇到的问题是我无法使用数组正确分配数据源到 collectionview。发生的情况是,当我加载 tableview 并向下滚动时,我看到重复的记录,因此例如前 3 行显示正确(就数据和项目数而言),但是从第 4 行开始,例如,数据是重复,所以我再次看到前 3 行的记录,当然这不必发生,因为如果我滚动第 4 行(第 4 行的集合视图),应用程序会由于索引问题而崩溃范围。

这很容易理解:假设我在第一行有 10 个单元格,在第 4 行/或部分有 5 个单元格,根据您的喜好......滚动第 4 行的集合视图将导致崩溃。这是因为错误的数据实际上与第一行相同:相反,我只有 5 个单元格要呈现...

我使用的技术非常简单:为每个 tableviewcell 的标签指定实际的 indexpath.section。然后在 collectionview 中,使用此标签循环遍历数组,然后使用 indexpath.item 来获取正确的数组

现在让我们来看看代码:

表视图

func numberOfSections(in tableView: UITableView) -> Int {
    return DataManager.shared.datasource.count
}
func tableView(_ tableView: …
Run Code Online (Sandbox Code Playgroud)

arrays uitableview ios uicollectionview swift3

0
推荐指数
1
解决办法
1920
查看次数

我如何避免将这 3 行写两次?

考虑 SwiftUI 中的以下扩展:

extension Text{
   func applyBG() -> some View {
      self
         .padding(20)
         .background(Color(hue: 0, saturation: 0, brightness: 0.22).cornerRadius(10))
         .foregroundColor(.white)
   }
}

extension TextField{
   func applyBG() -> some View {
      self
         .padding(20)
         .background(Color(hue: 0, saturation: 0, brightness: 0.22).cornerRadius(10))
         .foregroundColor(.white)
   }
}
Run Code Online (Sandbox Code Playgroud)

我觉得我可以写得更好,避免重复。我可能可以用类似的方法解决这个问题:

extension View{
   func applyBG() -> some View {
      self
         .padding(20)
         .background(Color(hue: 0, saturation: 0, brightness: 0.22).cornerRadius(10))
         .foregroundColor(.white)
   }
}
Run Code Online (Sandbox Code Playgroud)

但我不希望我所有的观点都能够调用这个方法。我只希望 Text 和 Textfield 有这样的方法。我尝试使用协议和关联类型,但我无法一次编写这些行以实现干净的代码。关于如何实现 DRY 的任何提示或伪代码?

generics protocols swift swiftui

0
推荐指数
1
解决办法
80
查看次数