Отображение модального контроллера представления с прозрачным представлением над другим контроллером при отображении панели навигации родительского контроллера в Swift - PullRequest
0 голосов
/ 04 марта 2020

Я хотел бы отобразить модальный контроллер вида с прозрачным фоном, который имеет небольшой вид внутри, который будет отображаться как предупреждение. Я хочу отобразить то же самое над другим контроллером представления, который находится в стеке навигации. Я пытался представить свой второй контроллер разными способами, например, встроить его в контроллер навигации, из контроллера навигации, самого контроллера второго представления и т. Д. 1014 *. Но ни один из них не дает мне ту же панель навигации, что и родительский контроллер. Я попытался добавить его в качестве подпредставления, но тогда мои методы делегата текстового поля не вызывались. Может ли кто-нибудь, пожалуйста, помогите мне с решением для этого. Добавление некоторых решений, которые я попробовал, которые я получил из разных ответов переполнения стека .. 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)

Большое спасибо заранее ...

Ответы [ 2 ]

0 голосов
/ 04 марта 2020

Я не понял, как я могу представить представление второго контроллера. Но, наконец, я добавил его только в качестве подпредставления. И как я получил это работает, как показано ниже

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

Пожалуйста, сообщите мне, если какое-либо другое решение работает.

0 голосов
/ 04 марта 2020

Я сделал это в таком проекте:

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)

Надеюсь, это поможет вам.

...