From 8646a4dbd462d31e23a99fddc787ac8e68b57dcd Mon Sep 17 00:00:00 2001 From: v504 Date: Fri, 29 Aug 2025 09:50:14 +0800 Subject: [PATCH] Improve history data fetching in HistoryView by checking for additional pages of data. Update loading logic to ensure accurate tracking of available history items and enhance user experience during data retrieval. --- MyQrCode/Views/History/HistoryView.swift | 12 +- docs/HISTORY_LOAD_MORE_OPTIMIZATION_README.md | 138 ++++++++++++++++++ 2 files changed, 149 insertions(+), 1 deletion(-) create mode 100644 docs/HISTORY_LOAD_MORE_OPTIMIZATION_README.md diff --git a/MyQrCode/Views/History/HistoryView.swift b/MyQrCode/Views/History/HistoryView.swift index 453d5e0..73d691f 100644 --- a/MyQrCode/Views/History/HistoryView.swift +++ b/MyQrCode/Views/History/HistoryView.swift @@ -204,7 +204,13 @@ Button("delete".localized, role: .destructive) { hasMoreData = true DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { - allHistoryItems = coreDataManager.fetchHistoryItems(page: currentPage) + let items = coreDataManager.fetchHistoryItems(page: currentPage) + allHistoryItems = items + + // 检查是否还有更多数据 + let nextPageItems = coreDataManager.fetchHistoryItems(page: currentPage + 1) + hasMoreData = !nextPageItems.isEmpty + isLoading = false } } @@ -223,6 +229,10 @@ Button("delete".localized, role: .destructive) { self.hasMoreData = false } else { self.allHistoryItems.append(contentsOf: newItems) + + // 检查是否还有更多数据 + let nextPageItems = coreDataManager.fetchHistoryItems(page: self.currentPage + 1) + self.hasMoreData = !nextPageItems.isEmpty } self.isLoadingMore = false } diff --git a/docs/HISTORY_LOAD_MORE_OPTIMIZATION_README.md b/docs/HISTORY_LOAD_MORE_OPTIMIZATION_README.md new file mode 100644 index 0000000..5a9683c --- /dev/null +++ b/docs/HISTORY_LOAD_MORE_OPTIMIZATION_README.md @@ -0,0 +1,138 @@ +# 历史界面加载更多功能优化记录 + +## 优化概述 +对历史界面的加载更多功能进行了优化,确保在没有更多数据时不显示加载更多按钮,提升用户体验和界面逻辑的准确性。 + +## 问题分析 + +### 原有问题 +1. **初始状态问题**: `hasMoreData` 在每次加载时都被重置为 `true`,导致即使没有更多数据也可能显示加载更多按钮 +2. **状态检查不准确**: 没有在初始加载时检查是否还有更多数据 +3. **用户体验不佳**: 用户可能看到加载更多按钮但点击后没有新数据 + +## 优化方案 + +### 1. 初始加载时检查更多数据 +**文件**: `MyQrCode/Views/History/HistoryView.swift` + +**修改内容**: +- 在 `loadHistoryItems()` 方法中添加了下一页数据检查 +- 确保初始加载时就能准确判断是否还有更多数据 + +**修改前**: +```swift +private func loadHistoryItems() { + isLoading = true + currentPage = 0 + hasMoreData = true + + DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { + allHistoryItems = coreDataManager.fetchHistoryItems(page: currentPage) + isLoading = false + } +} +``` + +**修改后**: +```swift +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` 状态 + +**修改前**: +```swift +DispatchQueue.main.async { + if newItems.isEmpty { + self.hasMoreData = false + } else { + self.allHistoryItems.append(contentsOf: newItems) + } + self.isLoadingMore = false +} +``` + +**修改后**: +```swift +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状态与实际数据状态保持同步 + +## 实现细节 + +### 检查逻辑 +```swift +// 检查是否还有更多数据 +let nextPageItems = coreDataManager.fetchHistoryItems(page: currentPage + 1) +hasMoreData = !nextPageItems.isEmpty +``` + +### 显示条件 +```swift +// 加载更多按钮的显示条件 +if hasMoreData && !isLoadingMore { + // 显示加载更多按钮 +} +``` + +### 加载指示器 +```swift +// 加载更多指示器 +if isLoadingMore { + // 显示加载指示器 +} +``` + +## 总结 +这次优化解决了历史界面加载更多功能的状态管理问题,确保: +1. 初始加载时准确判断是否有更多数据 +2. 加载更多后正确更新状态 +3. 只在真正有更多数据时显示加载更多按钮 +4. 提供更好的用户体验和界面逻辑一致性 + +优化后的历史界面具有更准确的状态管理和更好的用户体验。