You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI实现多信息二维码生成器:添加整数选择器方法

实现多信息整合的修改方案

需要修改的核心点:

  1. 新增整数选择器的状态与UI
    在ContentView中添加整数状态变量,并加入对应的Picker组件,用于选择整数。
  2. 更新二维码生成视图的参数传递
    修改GenerateQRCode视图,使其同时接收日期和整数的绑定值,而非单一的日期参数。
  3. 整合多信息生成二维码输入内容
    调整二维码生成逻辑,将日期字符串和整数字符串拼接成统一文本(建议用分隔符区分,方便后续解析),再转换为二维码所需的Data。
  4. 调整界面布局
    将新增的整数选择器加入原有的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 17:35:25