gpt4 book ai didi

iOS 13 和 UINavigationBarDelegate::shouldPop()

转载 作者:行者123 更新时间:2023-11-29 05:25:59 30 4
gpt4 key购买 nike

我已将 Xcode 升级到 11,并且使用 UINavigationBarDelegate 协议(protocol)中的 shouldPop() 方法在我们的 iOS 应用程序的 iOS13 模拟器/真实设备上发现了一些问题:

这个协议(protocol)有4个方法,其中3个工作正常,只有这个shouldPop()不再工作了。如果我在以前的 iOS 版本设备/模拟器上运行应用程序,一切都很好,shouldPop() 会被调用,但如果我在 iOS13 上运行应用程序,shouldPop() 不会被调用。因为在以前的 iOS 版本上一切正常,调用了协议(protocol)的 4 个方法中的 3 个,并且我在文档中没有找到不支持/不推荐使用 shouldPop() 的情况,这似乎是一个错误,但我不确定.

你们对此有什么想法吗?

谢谢你,蒂比。

private class DummyNavigationController: UINavigationController, UINavigationControllerDelegate, UINavigationBarDelegate {
var rootViewController: UIViewController? {
didSet {
self.delegate = self
}
}

func navigationBar(_ navigationBar: UINavigationBar, didPush item: UINavigationItem) {
// working
}

func navigationBar(_ navigationBar: UINavigationBar, shouldPush item: UINavigationItem) -> Bool {
// working
return true
}

func navigationBar(_ navigationBar: UINavigationBar, didPop item: UINavigationItem) {
// working
}

func navigationBar(_ navigationBar: UINavigationBar, shouldPop item: UINavigationItem) -> Bool {
// not working
return true
}
}

private class DummyViewController: UIViewController {
convenience init(_ showBackText: Bool) {
self.init()
if !showBackText {
self.navigationItem.title = ""
}
}
}

class OpenModalWithNavigation {

static func present(viewController: UIViewController,
parentViewController: UIViewController,
showBackText: Bool = false,
presentationStyle: UIModalPresentationStyle = .overCurrentContext,
transitionStyle: UIModalTransitionStyle = .crossDissolve) {

let navController = DummyNavigationController()
navController.rootViewController = parentViewController
navController.pushViewController(DummyViewController(showBackText), animated: false)
navController.pushViewController(viewController, animated: false)
navController.modalPresentationStyle = presentationStyle
navController.modalTransitionStyle = transitionStyle
parentViewController.present(navController, animated: true, completion: nil)
}
}

编辑:经过对我们的大代码的一些调查后,是的,我们从自定义的“后退”按钮调用 popViewController()。它在某种程度上与下面的代码类似:如果我通过 OpenModalWithNavigation.present() 放入 DummyNavigationController 一个 qqq 实例,则 shouldPop() 不会被触发。

class qqq: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()

self.view.backgroundColor = UIColor.green

let button = UIButton(type: .custom)
let backImage = UIImage(named: "back")
button.setImage(backImage, for: .normal)
button.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
button.addTarget(self, action: #selector(self.goBack), for: .touchUpInside)

let backButton = UIBarButtonItem(customView: button)
self.navigationItem.leftBarButtonItem = backButton
}

@objc func goBack() {
self.navigationController?.popViewController(animated: true)
}
}

还有,qqq的简化形式(见下文),它不起作用...它似乎与popViewController()有关

class qqq: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()

DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(2), execute: {
self.navigationController?.popViewController(animated: true)
})
}
}

如果我按下默认的后退按钮,一切正常,shouldPop() 被调用;当我们调用 popViewController() 时不会 - 这仅发生在运行 iOS13 的设备/模拟器上;对于 iOS13 之前的版本:一切都很好。

最佳答案

似乎仅在 iOS 模拟器上无法正常工作。如果您尝试在设备上运行,一切都很好。

关于iOS 13 和 UINavigationBarDelegate::shouldPop(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58166217/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com