SwiftUI实现多信息二维码生成器:添加整数选择器方法
实现多信息整合的修改方案
需要修改的核心点:
- 新增整数选择器的状态与UI
在ContentView中添加整数状态变量,并加入对应的Picker组件,用于选择整数。 - 更新二维码生成视图的参数传递
修改GenerateQRCode视图,使其同时接收日期和整数的绑定值,而非单一的日期参数。 - 整合多信息生成二维码输入内容
调整二维码生成逻辑,将日期字符串和整数字符串拼接成统一文本(建议用分隔符区分,方便后续解析),再转换为二维码所需的Data。 - 调整界面布局
将新增的整数选择器加入原有的VStack布局,与日期选择器并列。
修改后的完整代码:
import Foundation import SwiftUI import CoreImage.CIFilterBuiltins struct ContentView: View { @State var selectedDate = Date() @State var selectedNumber = 1 // 默认整数初始值 var body: some View { VStack(spacing: 20) { DatePicker("", selection: $selectedDate, displayedComponents: [.hourAndMinute]) .datePickerStyle(.wheel) // 新增整数选择器 Picker("选择整数", selection: $selectedNumber) { ForEach(1...100, id: \.self) { num in Text("\(num)").tag(num) } } .pickerStyle(.wheel) GenerateQRCode(selectedDate: $selectedDate, selectedNumber: $selectedNumber) } .padding() } } struct GenerateQRCode: View { @Binding var selectedDate: Date @Binding var selectedNumber: Int let filter = CIFilter.qrCodeGenerator() let context = CIContext() var dateFormatter: DateFormatter { let df = DateFormatter() df.dateFormat = "HH:mm" return df } var body: some View { Image(uiImage: generateQRImage()) .interpolation(.none) .resizable() .frame(width: 150, height: 150) } func generateQRImage() -> UIImage { // 用逗号分隔日期和整数,方便后续解析还原 let combinedText = "\(dateFormatter.string(from: selectedDate)),\(selectedNumber)" guard let data = combinedText.data(using: .utf8) else { return UIImage(systemName: "xmark") ?? UIImage() } filter.setValue(data, forKey: "inputMessage") guard let qrImage = filter.outputImage, let cgImage = context.createCGImage(qrImage, from: qrImage.extent) else { return UIImage(systemName: "xmark") ?? UIImage() } return UIImage(cgImage: cgImage) } }
关键修改说明:
- 整数选择器:示例生成1-100的选项,可根据需求调整范围;
- 信息整合:使用逗号作为分隔符,扫描二维码后可通过拆分字符串还原原始日期和整数数据;
- 参数同步:通过绑定值确保UI选择的变化能实时同步到二维码生成逻辑;
- 布局优化:移除原代码中无实际作用的
NavigationView,若需导航可自行加回。
内容的提问来源于stack exchange,提问作者user19928919
相关产品推荐
相关产品推荐

