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.
139 lines
4.0 KiB
139 lines
4.0 KiB
# 历史界面加载更多功能优化记录
|
|
|
|
## 优化概述
|
|
对历史界面的加载更多功能进行了优化,确保在没有更多数据时不显示加载更多按钮,提升用户体验和界面逻辑的准确性。
|
|
|
|
## 问题分析
|
|
|
|
### 原有问题
|
|
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. 提供更好的用户体验和界面逻辑一致性
|
|
|
|
优化后的历史界面具有更准确的状态管理和更好的用户体验。
|