Представьте модальный контроллер вида с прозрачным фоном
Я хочу представить 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
, хотя это выглядит хорошо с этим кодом!