我想以编程方式呈现一个UIViewController
,它应该以透明背景显示(或不显示)。我希望它适用于iOS 7.0及更高版本。我发现自己有很多问题(和答案),但他们无法帮助我。这是我的应用程序的视图层次结构。
我正在使用侧面菜单控制器(RESideMenu)。
我有一个rootView(来自RESideMenu的基础) - >在UINavigationController
中显示中心控制器(以及左视图控制器)。
在要求中,我想提出一个视图控制器
从推送的视图控制器(在导航层次结构中)
从呈现的视图控制器(在导航层次结构中)
此外,我需要呈现它并执行一些操作,然后将其删除。
我很确定这应该适用于许多情况,有(或没有)侧面菜单,甚至导航控制器。
我在这个队列中发布了一个单独的问题(当然也是它的答案),因为我认为这对社区开发者有帮助,他们可能也因为缺乏可接受的解决方案而感到沮丧。
答案 0 :(得分:14)
假设我们在
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
内显示自定义弹出窗口虽然它看起来很好用这段代码!