美文网首页iOS 开发 iOSiOS,object-c和swift开发
自制AlertViewController以及实现UIViewC

自制AlertViewController以及实现UIViewC

作者: 4ba6804ff45f | 来源:发表于2016-05-01 23:49 被阅读968次

自制AlertViewController其实比较简单,而且适用比较广泛,可以做出一些需要的跳转效果。

1.首先需要创建两个UIViewController,一个作为主页面,一个作为AlertViewController覆盖在其上边。

如图,这个作为主页面。

这个作为AlertViewController,在这里设置了一个backgroundView并把其alpha调为了0.3。

2.编写跳转代码。在ViewController的buttonAction里加上如下代码。

    KLAlertViewController *alertOne = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"sbAlertView"];
    [self addChildViewController:alertOne];
    [self.view addSubview:alertOne.view];
    [alertOne didMoveToParentViewController:self];

因为这里的KLAlertViewController是存放在storyboard中的,所以初始化时请注意区分是使用UIStoryboard还是xib来初始化ViewController。
这里说一下代码意思,第一句初始化,第二句是把初始化的页面的controller移到本controller上来获取将要发生的事件;第三局把初始化的KLAlertViewController上要显示的View层添加到当前页面上;最后一句完成移动覆盖。

3.编写移除代码。在KLAlertViewController的 『pls click』这个button的action方法里写的代码如下:

    [self didMoveToParentViewController:nil];
    [self.view removeFromSuperview];
    [self removeFromParentViewController];

每次点击按钮执行这三句代码就会把本页面移除。

效果如图:


4.添加tap事件以实现点击空白处移除alertView。
(1)添加对应的图层来接收点击事件;
(2)遵守协议 <UIGestureRecognizerDelegate>;
(3)添加手势事件,这里用代码添加:

    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(removeFromSuperViewController:)];
    tap.delegate = self;
    tap.numberOfTapsRequired = 1;
    tap.delaysTouchesBegan = YES;
    [self.backgroundTapView addGestureRecognizer:tap];

(4)改进移除方法,以实现移除点击事件和接收事件:

- (void)removeFromSuperViewController:(UIGestureRecognizer *)gr {
    [self didMoveToParentViewController:nil];
    [self.view removeFromSuperview];
    [self removeFromParentViewController];
    [self.backgroundTapView removeGestureRecognizer:gr];
}

效果如图:


Alert.gif

5.增加一个方法控制显示,减少代码重复问题。

- (void)show {
    UIViewController *rootViewController = [UIApplication sharedApplication].keyWindow.rootViewController;
    [rootViewController addChildViewController:self];
    [rootViewController.view addSubview:self.view];
    [self didMoveToParentViewController:rootViewController];
}

之后使用便只需要调用此方法来显示。

到此一个基本模型就搭了出来,根据需要可以提供接口来设置图片、文字、样式、是否点击空白消失等等功能。

代码:https://github.com/Leon-Kang/KLAlertViewController

相关文章

网友评论

    本文标题:自制AlertViewController以及实现UIViewC

    本文链接:https://www.haomeiwen.com/subject/ceqlrttx.html