在Swift中显示父控制器的导航栏的同时,在另一个控制器上方显示具有透明视图的模式视图控制器



我想显示一个具有透明背景的模态视图控制器,该控制器内部有一个小视图,将显示为警报。我想在导航堆栈中的另一个视图控制器上显示相同的内容。我尝试以多种方式展示我的第二个控制器,如嵌入导航控制器、从导航控制器、第二视图控制器本身等。但其中任何一个都不能为我提供与父控制器相同的导航栏。我尝试将其添加为子视图,但随后没有调用我的textfield委托方法。有人能帮我解决这个问题吗。添加了我尝试过的一些解决方案,这些解决方案来自不同的堆栈溢出答案。。1.

guard let alertController = /* my controller */ else { return }
let navController = UINavigationController(rootViewController: alertController)
alertController.delegate = self
alertController.valueText = "Value"
alertController.userPhoneNumber = updatedUserPhoneNumber
navController.modalTransitionStyle = .crossDissolve
navController.modalPresentationStyle = .currentContext
present(navController, animated: false, completion: nil)

2.

guard let alertController = /* my controller */ else { return }
alertController.delegate = self
alertController.valueText = "Value"
alertController.userPhoneNumber = updatedUserPhoneNumber
alertController.modalTransitionStyle = .crossDissolve
alertController.modalPresentationStyle = .currentContext
navigationController.present(alertController, animated: false, completion: nil)

3.

guard let alertController = /* my controller */ else { return }
let navController = UINavigationController(rootViewController: alertController)
alertController.delegate = self
alertController.valueText = "Value"
alertController.userPhoneNumber = updatedUserPhoneNumber
navController.modalTransitionStyle = .crossDissolve
navController.modalPresentationStyle = .currentContext
navigationController.present(navController, animated: false, completion: nil)

4.

guard let alertController = /* my controller */ else { return }
alertController.delegate = self
alertController.valueText = "Value"
alertController.userPhoneNumber = updatedUserPhoneNumber
alertController.modalTransitionStyle = .crossDissolve
alertController.modalPresentationStyle = .currentContext
present(alertController, animated: false, completion: nil)

提前非常感谢。。。

我在这样的项目中做到了:

let controllerToPresent = UIViewController()
controllerToPresent.providesPresentationContextTransitionStyle = true
controllerToPresent.definesPresentationContext = true
controllerToPresent.modalPresentationStyle = .overCurrentContext
controllerToPresent.view.backgroundColor = UIColor.init(white: 0.4, alpha: 0.8)
navigationController.visibleViewController?.present(controllerToPresent, animated: true)
// OR
navigationController.present(controllerToPresent, animated: true)

我希望它能帮助你。

我不知道如何呈现第二个控制器的视图。但最后我添加它只是作为一个子视图。我是如何做到这一点的,就像低于

https://developer.apple.com/library/archive/featuredarticles/ViewControllerPGforiPhoneOS/ImplementingaContainerViewController.html

addChild(alertController) view.addSubview(alertController.view) alertController.didMove(toParent: self)

并像一样移除

willMove(toParent: nil) view.removeFromSuperview() removeFromParent()

请告知我是否有其他解决方案有效。

最新更新