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. 提供更好的用户体验和界面逻辑一致性 + +优化后的历史界面具有更准确的状态管理和更好的用户体验。