前言
众所周知,iOS显示新的控制器方法通常只有三个:A.push方式; B.modal方式; C.设置为keywindow的根控制器。 而最灵活的貌似是modal方式,几乎可以在随处冒出来。
使用
既然modal一个控制器这么好用,设置完属性让控制器消失也方便,要处理一些比较复杂的业务时,如果你创建一个View,要设置代理等方式添加事件监听,而控制器可以直接处理,那我们最好选择使用modal啦。
现在比较流行的登录方式,就是用modal方式实现的,在你需要登录才能操作的界面,直接modal出登录控制器:
LoginViewController *loginVc = [[LoginViewController alloc]init];
[self presentViewController:loginVc animated:YES completion:nil];
而你想让登录控制器消失,直接在登录控制器里一句代码搞定:
[self dismissViewControllerAnimated:YES completion:nil];
回归主题
废话说了这么多,主要是为了简单介绍一下modal的基本用法。好了,下面正式上干货。
modal方式present一个半透明的ViewController,直接上代码:
MSTestViewController *vc = [[MSTestViewController alloc] init];
vc.view.backgroundColor = [UIColor colorWithWhite:0 alpha:0.5];
float version = [UIDevice currentDevice].systemVersion.floatValue;
if (version < 8.0) { // iOS 7 实现的方式略有不同(设置self)
self.modalPresentationStyle = UIModalPresentationCurrentContext;
// iOS8以下必须使用rootViewController,否则背景会变黑
[self.view.window.rootViewController presentViewController:vc animated:YES completion:^{
}];
} else { // iOS 8 以上实现(设置vc)
vc.modalPresentationStyle = UIModalPresentationOverCurrentContext|UIModalPresentationFullScreen;
//如果控制器属于navigationcontroller或者tababrControlelr子控制器,不使用UIModalPresentationFullScreen 的话, bar 会盖住你的modal出来的控制器
[self presentViewController:vc animated:YES completion:^{
// 也可以在这里做一些完成modal后需要做得事情
}];
}
最后
很多时候,我们modal出来的控制器都不是透明的,而网上能实现的方式分享很少,特此分享给有需要的同学!