You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
MyQRCode/docs/HISTORY_LOAD_MORE_OPTIMIZAT...

4.0 KiB

历史界面加载更多功能优化记录

优化概述

对历史界面的加载更多功能进行了优化,确保在没有更多数据时不显示加载更多按钮,提升用户体验和界面逻辑的准确性。

问题分析

原有问题

  1. 初始状态问题: hasMoreData 在每次加载时都被重置为 true,导致即使没有更多数据也可能显示加载更多按钮
  2. 状态检查不准确: 没有在初始加载时检查是否还有更多数据
  3. 用户体验不佳: 用户可能看到加载更多按钮但点击后没有新数据

优化方案

1. 初始加载时检查更多数据

文件: MyQrCode/Views/History/HistoryView.swift

修改内容:

  • loadHistoryItems() 方法中添加了下一页数据检查
  • 确保初始加载时就能准确判断是否还有更多数据

修改前:

private func loadHistoryItems() {
    isLoading = true
    currentPage = 0
    hasMoreData = true
    
    DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
        allHistoryItems = coreDataManager.fetchHistoryItems(page: currentPage)
        isLoading = false
    }
}

修改后:

private func loadHistoryItems() {
    isLoading = true
    currentPage = 0
    hasMoreData = true
    
    DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
        let items = coreDataManager.fetchHistoryItems(page: currentPage)
        allHistoryItems = items
        
        // 检查是否还有更多数据
        let nextPageItems = coreDataManager.fetchHistoryItems(page: currentPage + 1)
        hasMoreData = !nextPageItems.isEmpty
        
        isLoading = false
    }
}

2. 加载更多时检查下一页数据

修改内容:

  • loadMoreHistoryItems() 方法中添加了下一页数据检查
  • 确保每次加载更多后都能准确更新 hasMoreData 状态

修改前:

DispatchQueue.main.async {
    if newItems.isEmpty {
        self.hasMoreData = false
    } else {
        self.allHistoryItems.append(contentsOf: newItems)
    }
    self.isLoadingMore = false
}

修改后:

DispatchQueue.main.async {
    if newItems.isEmpty {
        self.hasMoreData = false
    } else {
        self.allHistoryItems.append(contentsOf: newItems)
        
        // 检查是否还有更多数据
        let nextPageItems = coreDataManager.fetchHistoryItems(page: self.currentPage + 1)
        self.hasMoreData = !nextPageItems.isEmpty
    }
    self.isLoadingMore = false
}

优化效果

用户体验提升

  • 准确性: 加载更多按钮只在真正有更多数据时显示
  • 一致性: 状态检查逻辑在初始加载和加载更多时保持一致
  • 清晰性: 用户不会看到误导性的加载更多按钮

技术改进

  • 状态管理: hasMoreData 状态更加准确和可靠
  • 性能优化: 避免了不必要的UI更新和用户操作
  • 逻辑完整性: 加载逻辑更加完整和健壮

界面行为

  • 初始加载: 如果只有一页数据,不会显示加载更多按钮
  • 加载更多: 每次加载后都会检查是否还有更多数据
  • 状态同步: UI状态与实际数据状态保持同步

实现细节

检查逻辑

// 检查是否还有更多数据
let nextPageItems = coreDataManager.fetchHistoryItems(page: currentPage + 1)
hasMoreData = !nextPageItems.isEmpty

显示条件

// 加载更多按钮的显示条件
if hasMoreData && !isLoadingMore {
    // 显示加载更多按钮
}

加载指示器

// 加载更多指示器
if isLoadingMore {
    // 显示加载指示器
}

总结

这次优化解决了历史界面加载更多功能的状态管理问题,确保:

  1. 初始加载时准确判断是否有更多数据
  2. 加载更多后正确更新状态
  3. 只在真正有更多数据时显示加载更多按钮
  4. 提供更好的用户体验和界面逻辑一致性

优化后的历史界面具有更准确的状态管理和更好的用户体验。