iphone:自定义UIAlertView
由于项目中有这样一个需求:需要在保存是弹出框选择保存的地点。选择UIAlertView来实现,但是要在UIAlertView中增加UISwitch的控件,这就需要自定义一个继承UIAlertView的类来自定义UIAlertView了。
实现效果如下:(还没加图的)

我需要在点击确定的时候,知道两个Switch的状态,才能进一步做相应的功能。
自定义了SaveAlertView类。
在.h中,需要自定义一个@protocol,作为把switch状态传出去的出口。
声明相应的委托。看源码

#import <UIKit/UIKit.h> @protocol SaveAlertViewDelegate <NSObject> @optional
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex save2File:(BOOL) save2File save2Album:(BOOL) save2Album;
@end @interface SaveAlertView : UIAlertView @property(nonatomic, assign) id<SaveAlertViewDelegate> SaveAlertDelegate;
@property(readwrite, retain) UIImage *backgroundImage;
@property(readwrite, retain) UIImage *contentImage; @property(strong, nonatomic) IBOutlet UISwitch *switch1;
@property(strong, nonatomic) IBOutlet UISwitch *switch2; - (id)initWithImage:(UIImage *)image contentImage:(UIImage *)content; @end

在.m中主要是把系统的原来控件隐藏掉(在layoutSubviews中实现),在添加自己控件,及其点击相应代码。
在layoutSubviews中隐藏系统的控件

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];
}
}

看完整的.m代码

#import "SaveAlertView.h" @implementation SaveAlertView
@synthesize SaveAlertDelegate;
@synthesize backgroundImage;
@synthesize contentImage;
@synthesize switch1;
@synthesize switch2; - (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
} - (id)initWithImage:(UIImage *)image contentImage:(UIImage *)content{
if (self == [super init]) {
self.backgroundImage = image;
self.contentImage = content;
}
return self;
} - (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];
}
}
if (contentImage) {
UIImageView *contentview = [[UIImageView alloc] initWithImage:self.contentImage];
contentview.frame = CGRectMake(0, 0, backgroundImage.size.width, backgroundImage.size.height);
[self addSubview:contentview];
} UILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMake(20, 20, 136, 21)];
label1.text = @"保存为可编辑文件";
[self addSubview:label1]; UILabel *label2 = [[UILabel alloc] initWithFrame:CGRectMake(20, 65, 85, 21)];
label2.text = @"另存到相册";
[self addSubview:label2]; switch1 = [[UISwitch alloc] initWithFrame:CGRectMake(206, 17, 79, 27)];
[switch1 setOn:YES];
[self addSubview:switch1]; switch2 = [[UISwitch alloc] initWithFrame:CGRectMake(206, 62, 79, 27)];
[self addSubview:switch2]; UIButton *button1 = [[UIButton alloc] initWithFrame:CGRectMake(20, 118, 86, 36)];
button1.tag = 1;
[button1 setTitle:@"确定" forState:UIControlStateNormal];
button1.backgroundColor = [UIColor blueColor];
[button1 addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
[self addSubview:button1]; UIButton *button2 = [[UIButton alloc] initWithFrame:CGRectMake(199, 118, 86, 36)];
button2.tag = 2;
[button2 setTitle:@"取消" forState:UIControlStateNormal];
button2.backgroundColor = [UIColor blueColor];
[button2 addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
[self addSubview:button2]; self.backgroundColor = [UIColor grayColor];
} -(void) buttonClicked:(id)sender
{
UIButton *btn = (UIButton *) sender; if (SaveAlertDelegate) {
if ([SaveAlertDelegate respondsToSelector:@selector(alertView:clickedButtonAtIndex:)])
{
[SaveAlertDelegate alertView:self clickedButtonAtIndex:btn.tag save2File:[switch1 isOn] save2Album:[switch2 isOn]];
}
} [self dismissWithClickedButtonIndex:0 animated:YES]; } - (void) show {
[super show];
// CGSize imageSize = self.backgroundImage.size;
// self.bounds = CGRectMake(0, 0, imageSize.width, imageSize.height);
self.frame = CGRectMake(350, 300, 320, 191);
}
@end

然后是调用,不要忘记设置委托
SaveAlertView *savealert = [[SaveAlertView alloc] initWithFrame:CGRectMake(340, 221, 305, 191)];
savealert.SaveAlertDelegate = self;
[savealert show];
差不多就是这样了。
iphone:自定义UIAlertView的更多相关文章
- IOS7学习之路九(ios7自定义UIAlertView)
IOS7的UIAlertView 不支持自定义,无法添加subview . 不过可以用第三方库git上的下载链接 https://github.com/wimagguc/ios-custom-a ...
- 自定义UIAlertView
You can change accessoryView to any own customContentView in a standard alert view in iOS7 [alertVie ...
- iphone自定义铃声
Step1:下载iTunes Step2:连接手机登录iTunes并授权将音乐文件添加到资料库,修改音乐时间长度为40s Step3:在主界面选择音乐标签 Step4:选择一个mp3音乐文件,点击文件 ...
- iTunes 无法添加 iPhone 自定义铃声
本篇文章由:http://xinpure.com/itunes-unable-to-add-iphone-custom-ringtones/ 新版本 iTunes 需要在 菜单栏 -> 文件 中 ...
- iOS自定义提示弹出框(类似UIAlertView)
菜鸟一枚,大神勿喷.自己在牛刀小试的时候,发现系统的UIAlertView有点不喜欢,然后就自己自定义了一个UIAlertView,基本上实现了系统的UIAlertView,可以根据项目的需求修改UI ...
- iPhone开发 - 常用库
iPhone开发 - 常用库 这里总结了iPhone开发者开发过程中可能需要的一些资源 如何用Facebook graphic api上传视频: http://developers.facebook. ...
- iPhone开发资源汇总
如何用Facebook graphic api上传视频: http://developers.facebook.com/blog/post/532/ Keychain保存数据封装: https://g ...
- (转) iphone开发资源汇总
如何用Facebook graphic api上传视频: http://developers.facebook.com/blog/post/532/ Keychain保存数据封装: https://g ...
- iOS自定义多参数类型方法
前几天做自定义UIAlertView的时候,想仿造系统自带的初始化方法做一个AlertView,里面涉及到不确定多参数的设置和使用问题.这里做一下记录. 我自定义了一个方法: - (instancet ...
随机推荐
- win server 2003 将MBR转为GPT突破硬盘2TB的限制(附微软磁盘科普)
备注:https://technet.microsoft.com/zh-cn/library/cc773223.aspx GUID 分区表 与支持最大卷为 2 TB (terabytes) 并且每个磁 ...
- Javascript 多物体运动——逐行分析代码,让你轻松了解运动的原理
我们先来看下之前的运动的代码,是否支持多物体运动,会出现怎么样的问题. <style type="text/css"> div { width: 100px; heig ...
- javascript 数据结构和算法读书笔记 > 第五章 队列
队列是一种列表,但是它只能够在队尾插入元素,在队首删除元素.队列用于存储按照顺序排列的数据,先进先出.而栈则是后入栈的元素反而被优先处理. 实际中一般被应用在进程池.排队操作上面. 1. 队列的操作 ...
- linux下小记
今天碰到一个问题 记录下 /usr/bin/ld: cannot find ld 和ldconfig的区别 使用makefile编译的时候提示ld提示某个so找不到 当时使用ldconfig查了下 发 ...
- VB生成xml
Dim text As XmlText Dim doc As New XmlDocument '加入XML的声明段落 Dim node As XmlNode = doc.CreateXmlDeclar ...
- python计算md5值
from hashlib import md5 m = md5(') print m.hexdigest()
- 可以使用QT给龙芯开发软件
直接apt-get install libqt5core5a就有了,也许是一个很好的小众市场机会呢 至于系统,可以使用debian mips https://www.debian.org/devel/ ...
- WPF 路径和几何图形
原文 http://www.cnblogs.com/laoyang999/archive/2012/11/23/2783734.html 继承自Shap类的形状有:Rectangle.Ellipse. ...
- logstash indexer和shipper的配置
[elk@zjtest7-frontend config]$ cat logstash_agent.conf input { file { type => "zj_nginx_acce ...
- java 数字前自动补零实现
/** * 里数字转字符串前面自动补0的实现. * */ public class TestStringFormat { public static void main(String[] args) ...