在我的SwiftUI应用程序中,我在所有视图.navigationBarBackButtonHidden(true)中都设置了一个自定义后退按钮,因此iOSclassic 的"滑动后退"功能在任何地方都被禁用,但实际上我只在特定视图中需要它.

我使用以下代码重新启用了它:

extension UINavigationController: UIGestureRecognizerDelegate {
    override open func viewDidLoad() {
        super.viewDidLoad()
        interactivePopGestureRecognizer?.delegate = self
    }

    public func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
        return viewControllers.count > 1
    }
}

它可以工作,但不幸的是,它重新启用了在整个项目中的滑动,我该怎么办?

推荐答案

它可以通过一些全局应用程序状态进行管理,比如

class AppState {
  static let shared = AppState()

  var swipeEnabled = false    // << by default
}

extension UINavigationController: UIGestureRecognizerDelegate {
    // ...

    public func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
        return AppState.shared.swipeEnabled ? 
                 viewControllers.count > 1 : false // << here !!
    }
}

// ... and somewhere in view, for example
     .onAppear {
        AppState.shared.swipeEnabled = true
     }
     .onDisappear {
        AppState.shared.swipeEnabled = false
     }

Ios相关问答推荐

在SWIFT中将圆角+透明背景从导入视频(.mp4)添加到导出视频(.mov)

在某些情况下,UIHostingController在自动调整时不能调整大小

如何在SwiftUI中拥有基于操作系统版本的条件修饰符?

SWIFT用户界面检测手势的开始和结束

如何在iOS 17中拦截UITextView中的链接点击?UITextItemInteraction已弃用

磁盘上的Objective-C ISA指针与实例化对象时的比较

带菜单的选取器不适用于Int32,但适用于Int

uikit中如何触发swiftui功能

如何在 SwiftUI 视图中显示协议视图?

如何解码没有名称的 JSON 数组?

从视图模型中更新 EnvironmentObject

SwiftUI DatePicker 格式在每个设备上都不一样,如何让它总是显示相同的 Select 版本?

无法结合 UIImageView 旋转动画和 tableView 部分重新加载

如何在 Swift 上的 sendSynchronousRequest 中判断 Response.statusCode

检测 iPhone/iPad/iPod touch 的 colored颜色 ?

界面生成器中 UIView 的边框 colored颜色 不起作用?

UIView 和 initWithFrame 以及一个 NIB 文件.如何加载 NIB 文件?

如何隐藏uitabbar控制器

命令 /Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang 失败,退出代码为 1

从 iOS/Android 上的 Web 应用调用本机日期 Select 器