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

如何在SwiftUI中通过UIViewControllerRepresentable使用PKAddPassesViewController并解决关闭问题

问题根源

你当前的实现有两个核心问题:

  1. PKAddPassesViewControllerDelegate 回调中的绑定值赋值逻辑错误,没有触发状态变化
  2. 给Binding附加onChange的写法不符合SwiftUI规范,监听逻辑没有生效

修正方案

你可以直接去掉多余的中间done变量,把控制导航显隐的状态直接传入PassKit结构体,回调里直接修改显隐状态即可,完整修正代码如下:

1. 修正PassKit实现

import PassKit
import SwiftUI

struct PassKit: UIViewControllerRepresentable {
    // 直接绑定控制页面显隐的状态变量
    @Binding var isPresented: Bool
    var pass: PKPass
    
    class Coordinator: NSObject, PKAddPassesViewControllerDelegate {
        var parent: PassKit
        
        init(_ parent: PassKit) {
            self.parent = parent
        }
        
        // 点击Add/Cancel都会触发该回调
        func addPassesViewControllerDidFinish(_ controller: PKAddPassesViewController) {
            // 直接把显隐状态置为false,触发导航自动返回
            parent.isPresented = false
        }
    }
    
    func makeCoordinator() -> Coordinator {
        Coordinator(self)
    }
    
    func makeUIViewController(context: Context) -> PKAddPassesViewController {
        guard let passVC = PKAddPassesViewController(pass: pass) else {
            return PKAddPassesViewController()
        }
        passVC.delegate = context.coordinator
        return passVC
    }
    
    func updateUIViewController(_ uiViewController: PKAddPassesViewController, context: Context) {}
}

2. 修正调用侧代码

父视图中直接把控制导航显隐的PassKitPresent绑定传入即可,不需要多余的onChange监听:

// 父视图状态变量
@State private var PassKitPresent = false
// 你自己生成的PKPass实例
var targetPass: PKPass = ...

// 导航跳转代码
NavigationLink(
    destination: PassKit(isPresented: $PassKitPresent, pass: targetPass)
        .ignoresSafeArea()
        .navigationBarHidden(true),
    isActive: $PassKitPresent,
    label: {}
)

补充说明

如果你不需要push进入添加页,更推荐用sheet弹出的方式实现,代码更简洁,也更符合Wallet添加凭证的系统交互规范:

// 父视图中添加sheet修饰符
.sheet(isPresented: $PassKitPresent) {
    PassKit(isPresented: $PassKitPresent, pass: targetPass)
        .ignoresSafeArea()
}

内容的提问来源于stack exchange,提问作者Ashley Bailey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:24:01