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.
4.0 KiB
4.0 KiB
历史界面加载更多功能优化记录
优化概述
对历史界面的加载更多功能进行了优化,确保在没有更多数据时不显示加载更多按钮,提升用户体验和界面逻辑的准确性。
问题分析
原有问题
- 初始状态问题:
hasMoreData
在每次加载时都被重置为true
,导致即使没有更多数据也可能显示加载更多按钮 - 状态检查不准确: 没有在初始加载时检查是否还有更多数据
- 用户体验不佳: 用户可能看到加载更多按钮但点击后没有新数据
优化方案
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 {
// 显示加载指示器
}
总结
这次优化解决了历史界面加载更多功能的状态管理问题,确保:
- 初始加载时准确判断是否有更多数据
- 加载更多后正确更新状态
- 只在真正有更多数据时显示加载更多按钮
- 提供更好的用户体验和界面逻辑一致性
优化后的历史界面具有更准确的状态管理和更好的用户体验。