Представить модальный контроллер вида с прозрачным фоном
Я хочу представить UIViewController
программно, который должен отображаться (или, скорее, нет) с прозрачным фоном. Я хочу это для iOS 7.0 и выше. Я нашел себе много вопросов (и ответов), но они не смогли мне помочь. Вот иерархия представления моего приложения.
Я использую контроллер бокового меню (RESideMenu).
У меня есть rootView (база от RESideMenu) -> Отображение центрального контроллера (вместе с левым контроллером вида) в UINavigationController
,
В требованиях я хотел бы представить контроллер представления
Из контроллера с заданным видом (в навигационной иерархии)
Из представленного контроллера представления (в навигационной иерархии)
Кроме того, мне нужно представить его и выполнить некоторые действия, а затем удалить его.
Я почти уверен, что это должно работать во многих случаях, с (или без) боковым меню или даже с навигационным контроллером.
Я помещаю отдельный вопрос (и, конечно, и его ответ) в эту очередь, потому что я думаю, что он окажется полезным для разработчиков сообщества, которые также могут быть разочарованы отсутствием приемлемого решения этой проблемы.
1 ответ
Предположим, мы в
FirstViewController
//Obj-C
- (void) presentSecondVC {
SecondViewController *vc = [[SecondViewController alloc] init];
[self addChildViewController:vc];
[self didMoveToParentViewController:vc];
}
//Swift
func presentSecondVC() {
let vc = SecondViewController.init()
self.addChildViewController(vc)
self.didMove(toParentViewController: vc)
}
Некоторые из вас, возможно, должны написать выше метод, как этот,
//Obj-C
- (void) presentSecondVC {
SecondViewController *vc = [[SecondViewController alloc] init];
vc.view.frame = CGRectMake(0,0,width,height); //Your own CGRect
[self.view addSubview:vc.view]; //If you don't want to show inside a specific view
[self addChildViewController:vc];
[self didMoveToParentViewController:vc];
//for someone, may need to do this.
//[self.navigationController addChildViewController:vc];
//[self.navigationController didMoveToParentViewController:vc];
}
//Swift
func presentSecondVC() {
let vc = SecondViewController.init()
vc.view.frame = CGRect.init(x: 0, y: 0, width: width, height: height) //Your own CGRect
self.view.addSubview(vc.view) //If you don't want to show inside a specific view.
self.addChildViewController(vc)
self.didMove(toParentViewController: vc)
//for someone, may need to do this.
//self.navigationController?.addChildViewController(vc)
//self.navigationController?.didMove(toParentViewController: vc)
}
Сейчас в
SecondViewController
когда ты хочешь вернуться
//Obj-C
- (void) goBack {
[self removeFromParentViewController];
}
//Swift
func goBack() {
self.removeFromParentViewController()
}
Играй хорошо (с каждым сценарием):)
И да, это не будет отображать анимацию, в моем случае, я показываю пользовательское всплывающее окно внутри vc
хотя это выглядит красиво с этим кодом!