当前位置: 首页 > news >正文

【IOS】自定义UIAlertView样式,实现可替换背景和按钮

【原创作品, 欢迎转载,转载请在明显处注明! 谢谢。

原文地址:http://blog.csdn.net/toss156/article/details/7552075


UIAlertView 是一个十分常用的控件,网上也有好多类似的自定义AlertView的方法。但是感觉效果都不是很好,它们有的是在系统自带的上面添加文本框,也有的是完全自己用UIView来实现,还有的就是继承了UIAlertView 。

今天给大家带来的这个UIAlertView ,它也是继承了UIAlertView,然后屏蔽了系统的背景图片,和 按钮,然后自己添加,事件响应,从而完成了样式的自定义,这样做的好处是保留了 UIAlertView的模态窗口。

最终的效果图:

// // JKCustomAlert.m // AlertTest // // Created by on 12-5-9. // Copyright (c) 2012年 __MyCompanyName__. All rights reserved. // #import <UIKit/UIKit.h> @protocol JKCustomAlertDelegate <NSObject> @optional - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex; @end @interface JKCustomAlert : UIAlertView { id JKdelegate; UIImage *backgroundImage; UIImage *contentImage; NSMutableArray *_buttonArrays; } @property(readwrite, retain) UIImage *backgroundImage; @property(readwrite, retain) UIImage *contentImage; @property(nonatomic, assign) id JKdelegate; - (id)initWithImage:(UIImage *)image contentImage:(UIImage *)content; -(void) addButtonWithUIButton:(UIButton *) btn; @end


// // // JKCustomAlert.m // AlertTest // // Created by on 12-5-9. // Copyright (c) 2012年 __MyCompanyName__. All rights reserved. // #import "JKCustomAlert.h" @interface JKCustomAlert () @property(nonatomic, retain) NSMutableArray *_buttonArrays; @end @implementation JKCustomAlert @synthesize backgroundImage,contentImage,_buttonArrays,JKdelegate; - (id)initWithImage:(UIImage *)image contentImage:(UIImage *)content{ if (self == [super init]) { self.backgroundImage = image; self.contentImage = content; self._buttonArrays = [NSMutableArray arrayWithCapacity:4]; } return self; } -(void) addButtonWithUIButton:(UIButton *) btn { [_buttonArrays addObject:btn]; } - (void)drawRect:(CGRect)rect { CGSize imageSize = self.backgroundImage.size; [self.backgroundImage drawInRect:CGRectMake(0, 0, imageSize.width, imageSize.height)]; } - (void) layoutSubviews { //屏蔽系统的ImageView 和 UIButton for (UIView *v in [self subviews]) { if ([v class] == [UIImageView class]){ [v setHidden:YES]; } if ([v isKindOfClass:[UIButton class]] || [v isKindOfClass:NSClassFromString(@"UIThreePartButton")]) { [v setHidden:YES]; } } for (int i=0;i<[_buttonArrays count]; i++) { UIButton *btn = [_buttonArrays objectAtIndex:i]; btn.tag = i; [self addSubview:btn]; [btn addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside]; } if (contentImage) { UIImageView *contentview = [[UIImageView alloc] initWithImage:self.contentImage]; contentview.frame = CGRectMake(0, 0, backgroundImage.size.width, backgroundImage.size.height); [self addSubview:contentview]; } } -(void) buttonClicked:(id)sender { UIButton *btn = (UIButton *) sender; if (JKdelegate) { if ([JKdelegate respondsToSelector:@selector(alertView:clickedButtonAtIndex:)]) { [JKdelegate alertView:self clickedButtonAtIndex:btn.tag]; } } [self dismissWithClickedButtonIndex:0 animated:YES]; } - (void) show { [super show]; CGSize imageSize = self.backgroundImage.size; self.bounds = CGRectMake(0, 0, imageSize.width, imageSize.height); } - (void)dealloc { [_buttonArrays removeAllObjects]; [backgroundImage release]; if (contentImage) { [contentImage release]; contentImage = nil; } [super dealloc]; } @end


Demo下载地址:http://download.csdn.net/detail/toss156/4289966

相关文章:

  • Qt笔记-QAxContainer
  • 关于超低价小电脑的经营问题(给读者的一封信)
  • python3csv与xlsx文件操作模块(csv、xlsxwriter)
  • 关于”理爱德“(LinuxAid)商标的一点说明
  • 面向切面编程-AOP的介绍
  • 搭建一个android编辑环境详细步骤
  • 数据结构1_C---单链表的逆转
  • 5.条件,循环和其他语句
  • C++虚函数和多态性的关系【virtual】之一
  • 预编译理解
  • [拒绝毒瘤的小清新系列] give you a tree
  • 代码
  • c++ 前向引用详细解说
  • telnet不能用!!!提示:-bash: telnet: command not found
  • objective-c类别(Category)详细解说
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • docker容器内的网络抓包
  • Fastjson的基本使用方法大全
  • IDEA常用插件整理
  • JS变量作用域
  • mysql 5.6 原生Online DDL解析
  • PAT A1017 优先队列
  • quasar-framework cnodejs社区
  • XForms - 更强大的Form
  • 初识 beanstalkd
  • 前端性能优化——回流与重绘
  • 异常机制详解
  • 栈实现走出迷宫(C++)
  • 智能网联汽车信息安全
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • Java数据解析之JSON
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • #{}和${}的区别?
  • #pragma pack(1)
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (第一天)包装对象、作用域、创建对象
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (蓝桥杯每日一题)love
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • **CI中自动类加载的用法总结
  • *上位机的定义
  • .java 9 找不到符号_java找不到符号
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .NET开发不可不知、不可不用的辅助类(一)
  • ::
  • @Tag和@Operation标签失效问题。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(白虎组)
  • [30期] 我的学习方法
  • [AIGC] Kong:一个强大的 API 网关和服务平台