美文网首页iOS-项目实战
iOS 14使用最新的CollectionView(原文翻译)1

iOS 14使用最新的CollectionView(原文翻译)1

作者: 左方 | 来源:发表于2021-01-12 11:22 被阅读0次

    13. 更新collection视图中的数据

    Mountains Search示例演示了当用户筛选数据时,如何在collection视图中更新数据和用户界面。它显示了山脉名称的列表,并允许用户在搜索栏中键入文本,以便根据山脉名称进行过滤。

    这个集合视图mountainsCollectionView包含一个单独的section,其中包含从每个山的原始数据列表中创建的item。本例将数据的每一部分封装在MountainsController中定义的Mountain结构中。为了管理数据,本例使用一个可扩散的数据源,该数据源包含单个section和类型为Mountain的item。创建可扩散数据源(diffable data source)时,它将连接到mountainsCollectionView并注册一个单元类型LabelCell,以在collection视图中显示山的名称。然后,它用山的名字来配置这个单元。

    performQuery(with:) 方法更新数据和用户界面。该方法接受当前键入的筛选器文本,并生成名称中包含该文本的山脉列表。然后,它使用快照构造新过滤数据的表示。快照包含与以前相同的单个部分,但是现在,它不再包含表示每个山的项,而是只包含过滤后的山。

    然后,该方法调用apply(_:animatingDifferences:completion:),将快照中的数据应用于可扩散数据源。diffable数据源将快照中的数据存储为数据的新状态,计算上一个状态和新状态之间的差异,并触发用户界面以显示新状态。

    func performQuery(with filter: String?) {
        let mountains = mountainsController.filteredMountains(with: filter).sorted { $0.name < $1.name }
    
        var snapshot = NSDiffableDataSourceSnapshot<Section, MountainsController.Mountain>()
        snapshot.appendSections([.main])
        snapshot.appendItems(mountains)
        dataSource.apply(snapshot, animatingDifferences: true)
    }
    
    更新数据

    14. 更新多个section中的数据

    Settings:Wi-Fi示例演示了如何在使用多种section和item的table view中更新数据和用户界面。它在iOS设置中重新创建Wi-Fi页面,允许用户打开和关闭Wi-Fi开关以查看可用的和当前的Wi-Fi网络。

    updateUI(animated:) 方法根据是否启用Wi-Fi来确定要显示的section和item。如果禁用Wi-Fi,则该方法仅将.config section及其item添加到快照中。如果启用了Wi-Fi,则该方法会添加.networks部分及其item。

    let configItems = configurationItems.filter { !($0.type == .currentNetwork && !controller.wifiEnabled) }
    
    currentSnapshot = NSDiffableDataSourceSnapshot<Section, Item>()
    
    currentSnapshot.appendSections([.config])
    currentSnapshot.appendItems(configItems, toSection: .config)
    
    if controller.wifiEnabled {
        let sortedNetworks = controller.availableNetworks.sorted { $0.name < $1.name }
        let networkItems = sortedNetworks.map { Item(network: $0) }
        currentSnapshot.appendSections([.networks])
        currentSnapshot.appendItems(networkItems, toSection: .networks)
    }
    
    self.dataSource.apply(currentSnapshot, animatingDifferences: animated)
    
    更新多个section中的数据

    15. 增量更新数据

    插入排序可视化示例演示了如何增量更新数据,在数据从初始状态更改为最终状态时显示可见的进度。它以随机顺序显示一行色样,然后按光谱顺序迭代排序。

    此示例与其他可扩散数据源示例之间的关键区别在于,此示例不会创建空快照来更新数据的状态。相反,performSortStep() 方法通过使用数据源.snapshot(). 然后,它只修改快照的一部分,以逐步执行可视化排序。

    // Get the current state of the UI from the data source.
    var updatedSnapshot = dataSource.snapshot()
    
    // For each section, if needed, step through and perform the next sorting step.
    updatedSnapshot.sectionIdentifiers.forEach {
        let section = $0
        if !section.isSorted {
    
            // Step the sort algorithm.
            section.sortNext()
            let items = section.values
    
            // Replace the items for this section with the newly sorted items.
            updatedSnapshot.deleteItems(items)
            updatedSnapshot.appendItems(items, toSection: section)
    
            sectionCountNeedingSort += 1
        }
    }
    
    增量更新数据

    相关文章

      网友评论

        本文标题:iOS 14使用最新的CollectionView(原文翻译)1

        本文链接:https://www.haomeiwen.com/subject/gpmsaktx.html