我有一个数组中的名称列表,我想按字母顺序在集合视图中显示它们。并且还要显示每个部分的字母表如何实现这一点。 Click here for Image
答案 0 :(得分:0)
以下是我对你已有的假设:
Model
name
)
UICollectionView
背后的数据结构是Model
个对象这就是我要做的事情:
按Model
属性对name
数组进行排序。
sortedModels = models.sorted(by: { (first, second) -> Bool in
return first.title.compare(second.title) == ComparisonResult.orderedAscending
}
创建一个新属性来保存UICollectionView数据,其中字典键是单个字母(例如" A"),以及包含部分名称的部分名称数组正确的订单。这将是集合视图中的节标题
var data = Dictionary<Character, [Model]>()
var sections = [Character]
遍历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)
}
}
然后你的numberOfSectionsInCollectionView:
将返回字典中的键数
collectionView:numberOfItemsInSection:
将返回sections数组