【问题标题】:Displaying a modal view controller with transparent view above another controller while displaying navigation bar of the parent controller in Swift在 Swift 中显示父控制器的导航栏时,在另一个控制器上方显示具有透明视图的模态视图控制器
【发布时间】:2020-06-16 13:33:03
【问题描述】:

我想显示一个具有透明背景的模态视图控制器,它内部有一个小视图,它将显示为警报。我想在导航堆栈中的另一个视图控制器上方显示相同的内容。我尝试以多种方式展示我的第二个控制器,例如嵌入导航控制器、导航控制器、第二个视图控制器本身等。但是其中任何一个都不会给我与父控制器相同的导航栏。我尝试将其添加为子视图,但是没有调用我的文本字段委托方法。谁能帮我解决这个问题。添加一些我尝试过的解决方案,这些解决方案是从不同的堆栈溢出答案中获得的。 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)

非常感谢您提前...

【问题讨论】:

    标签: swift uinavigationcontroller modalviewcontroller presentmodalviewcontroller


    【解决方案1】:

    我不知道如何呈现第二个控制器的视图。但最后我只将它添加为子视图。我的工作方式如下所示

    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()

    如果任何其他解决方案有效,请告诉我。

    【讨论】:

      【解决方案2】:

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

      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)
      

      希望对你有帮助。

      【讨论】:

      • 感谢您的回复..我试过了,但无法得到正确的结果..
      • 您期望的结果是什么? (我不完全理解你的期望)
      • 对我来说,具有透明视图的第二个控制器覆盖了第一个控制器的导航栏。这意味着我在演示时也需要相同的导航栏。但那没有发生..
      • 好的,navigationController.visibleViewController?.present(controllerToPresent, animated: true) 不这样做吗?在我的应用程序中,这会在控制器上显示呈现的 VC,但不会在导航上显示
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-05
      • 2017-07-20
      • 2011-04-15
      • 1970-01-01
      • 2021-07-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多