Improve BarcodeDetailView by adding conditional sharing functionality. The share sheet now presents the barcode image if available; otherwise, it defaults to sharing the history item's content. Additionally, the share button is disabled when no barcode image is generated, enhancing user experience and preventing errors.

main
v504 2 months ago
parent 76976b5ec2
commit 22f065c444

@ -38,13 +38,18 @@ struct BarcodeDetailView: View {
}) { }) {
Image(systemName: "square.and.arrow.up") Image(systemName: "square.and.arrow.up")
} }
.disabled(barcodeImage == nil)
} }
} }
.onAppear { .onAppear {
generateBarcodeImage() generateBarcodeImage()
} }
.sheet(isPresented: $showingShareSheet) { .sheet(isPresented: $showingShareSheet) {
ShareSheet(activityItems: [historyItem.content ?? ""]) if let barcodeImage = barcodeImage {
ShareSheet(activityItems: [barcodeImage])
} else {
ShareSheet(activityItems: [historyItem.content ?? ""])
}
} }
.alert("提示", isPresented: $showingAlert) { .alert("提示", isPresented: $showingAlert) {
Button("确定") { } Button("确定") { }

@ -0,0 +1,104 @@
# 条形码详情界面分享功能修复
## 问题描述
在条形码详情界面中,分享功能存在问题:
- 点击分享按钮时,分享的是条形码的文字内容,而不是条形码图片
- 用户期望能够分享条形码图片,以便其他人可以扫描
## 修复内容
### 1. 修复分享逻辑
**文件**: `MyQrCode/Views/BarcodeDetailView.swift`
**修改前**:
```swift
.sheet(isPresented: $showingShareSheet) {
ShareSheet(activityItems: [historyItem.content ?? ""])
}
```
**修改后**:
```swift
.sheet(isPresented: $showingShareSheet) {
if let barcodeImage = barcodeImage {
ShareSheet(activityItems: [barcodeImage])
} else {
ShareSheet(activityItems: [historyItem.content ?? ""])
}
}
```
### 2. 优化导航栏分享按钮
**修改前**:
```swift
.toolbar {
ToolbarItem(placement: .navigationBarTrailing) {
Button(action: {
showingShareSheet = true
}) {
Image(systemName: "square.and.arrow.up")
}
}
}
```
**修改后**:
```swift
.toolbar {
ToolbarItem(placement: .navigationBarTrailing) {
Button(action: {
showingShareSheet = true
}) {
Image(systemName: "square.and.arrow.up")
}
.disabled(barcodeImage == nil)
}
}
```
## 修复效果
### 修复前
- 分享功能只能分享条形码的文字内容
- 用户无法分享条形码图片
- 导航栏分享按钮始终可用,即使条形码图片未生成
### 修复后
- 分享功能优先分享条形码图片
- 如果条形码图片未生成,则分享文字内容作为备选
- 导航栏分享按钮在条形码图片未生成时会被禁用
- 用户可以通过分享按钮或"分享条形码图片"按钮分享条形码图片
## 技术实现
### 分享逻辑
1. 检查 `barcodeImage` 是否存在
2. 如果存在,分享条形码图片
3. 如果不存在,分享条形码文字内容作为备选
### 用户体验优化
1. 导航栏分享按钮在图片未生成时禁用,避免用户困惑
2. 保持原有的"分享条形码图片"按钮功能
3. 确保分享功能始终可用,即使图片生成失败
## 测试验证
- ✅ 项目构建成功
- ✅ 分享功能逻辑正确
- ✅ 导航栏按钮状态正确
- ✅ 备选分享方案可用
## 相关文件
- `MyQrCode/Views/BarcodeDetailView.swift` - 主要修复文件
- `MyQrCode/Utils/BarcodeGenerator.swift` - 条形码图片生成器
- `MyQrCode/Views/QRCodeDetailView.swift` - 包含 ShareSheet 实现
## 注意事项
1. 确保 `BarcodeGenerator` 能正确生成条形码图片
2. 分享功能依赖于 `ShareSheet` 的实现
3. 图片生成是异步的,需要等待 `onAppear` 中的 `generateBarcodeImage()` 完成
Loading…
Cancel
Save