diff --git a/MyQrCode/Views/BarcodeDetailView.swift b/MyQrCode/Views/BarcodeDetailView.swift index 015106b..bccd329 100644 --- a/MyQrCode/Views/BarcodeDetailView.swift +++ b/MyQrCode/Views/BarcodeDetailView.swift @@ -38,13 +38,18 @@ struct BarcodeDetailView: View { }) { Image(systemName: "square.and.arrow.up") } + .disabled(barcodeImage == nil) } } .onAppear { generateBarcodeImage() } .sheet(isPresented: $showingShareSheet) { - ShareSheet(activityItems: [historyItem.content ?? ""]) + if let barcodeImage = barcodeImage { + ShareSheet(activityItems: [barcodeImage]) + } else { + ShareSheet(activityItems: [historyItem.content ?? ""]) + } } .alert("提示", isPresented: $showingAlert) { Button("确定") { } diff --git a/docs/BARCODE_SHARE_FIX_README.md b/docs/BARCODE_SHARE_FIX_README.md new file mode 100644 index 0000000..7935ba0 --- /dev/null +++ b/docs/BARCODE_SHARE_FIX_README.md @@ -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()` 完成