1

我有一个数组中的名称列表,我想按字母顺序在集合视图上显示它们。并且还展示了每个部分的字母表,我该如何实现这一点。 点击这里查看图片

4

1 回答 1

1

以下是我对您已有的假设:

  1. 你有一个Model带有属性的模型类 ( )name
  2. 你背后的数据结构是一个对象UICollectionView数组Model

这是我要做的:

  1. Model按其name属性对数组进行排序。

    sortedModels = models.sorted(by: { (first, second) -> Bool in
      return first.title.compare(second.title) == ComparisonResult.orderedAscending
    }
    
  2. 创建一个新属性来保存 UICollectionView 数据,其中字典键是单个字母(例如“A”),以及一个包含正确顺序的部分的部分名称数组。这将是集合视图中的部分标题

    var data = Dictionary<Character, [Model]>()
    var sections = [Character]
    
  3. 遍历sortedList,检查name属性的第一个字符,然后在字典中创建一个新数组(如果键不存在)或添加Model到现有数组

    models.forEach { (model) in
        let firstCharacter = model.name.characters.first!
        if var array = data[firstCharacter] {
            array.append(model)
            data[firstCharacter] = array
        } else {
            var array = [Model]()
            array.append(model)
            data[firstCharacter] = array
            sections.append(firstCharacter)
        }
    }
    
  4. 那么您numberOfSectionsInCollectionView:将返回字典中的键数

  5. 并将collectionView:numberOfItemsInSection:返回sections数组中的项目数
于 2017-07-30T11:06:01.297 回答