有时候原生的UIAlerViewl的功能并不能满足我们的使用.这时候我们就需要自定义UIAlertView了.
首先.为什么我要自定义一个UIAlertView而不是自定义苹果后面推荐的UIAlertController.
说点个人意见.UIAlertView是继承与UIView的.几乎调用一下show方法.哪里都能显示(这个怎么做到的后面会讲).UIAlertConrtoller继承与UIViewController.这样使用上不能很方便的show一下.需要跳转控制器那样给present出来
首先.介绍一下UIAlertView是怎么能够调用一下show就显示的.
建一个Single Application不做任何操作的话.我们是有一个界面的.这个界面运行在window上.
下面是设置显示在手机上第一个ViewController的方法
1.可视化版本
![]()
2.代码版:
当我们要用代码设置出现的第一个页面的时候.我们设置的是window的rootViewController.需要在AppDelegate中的didFinishLaunching里面写如下代码.下面是创建rootVc的五部曲
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
self.window.backgroundColor = [UIColor whiteColor];
UIViewController *vc = [[UIViewController alloc] init];
self.window.rootViewController = vc;
[self.window makeKeyAndVisible];
return YES;
}
呃呃呃,好像偏题了.
从上面我们知道了.VC是显示在window上的.但是要通过设置rootVc和window的makeKeyAndVisible.
而.UIWindow继承与UIView.那么我们就能直接使用-(void)addsubView;
来直接显示一个View.
既然Window的大小被我们设置成一个屏幕那么大.我们创建AlertView防止别人点击的话也可以创建成Window一样大.
想要消除的话直接调用-(void)removeFromSuperView;
就行了
自定义AlertView步骤
///创建UIView都会走这个方法
- (instancetype)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
//我们在`setupUI`中写UI设置代码
[self setupUI];
}
return self;
}
- (void)setupUI {
//如果要写动画的之类的话.可以在setupUI中初始化动画开始时的状态.
//example1
self.alpha = 0;
//example2
self.hidden = YES;
}
//我们在.h中定义一个- (void)show;方法.然后在.m中实现它
- (void)show;
- (void)show {
UIWindow *window = [UIApplication sharedApplication].keyWindow;
[window addSubview:self];
[UIView animateWithDuration:.5 delay:0 usingSpringWithDamping:10 initialSpringVelocity:10 options:UIViewAnimationOptionCurveEaseInOut animations:^{
self.alpha = 1;
} completion:^(BOOL finished) {
}];
}
到此我就介绍完了一个AlertView最基本的东西(如何把一个AlertView在任意地方调用,并且显示在手机最上面).相信自定义UI也难不住大家,如果不是很清楚的话可以去下面对应的GitHub地址看看