仿写一个UIAlertViewControl

有时候原生的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地址看看

GitHub对应地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值