iphone:自定义UIAlertView_weixin_34343000的博客-程序员秘密

由于项目中有这样一个需求:需要在保存是弹出框选择保存的地点。选择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];

 

差不多就是这样了。

转载于:https://www.cnblogs.com/haibosoft/p/4257062.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34343000/article/details/94193173

智能推荐

浙大PAT 1014. 福尔摩斯的约会 (解题思路)_温州的咸菜的博客-程序员秘密

大侦探福尔摩斯接到一张奇怪的字条:“我们约会吧!3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm”。大侦探很快就明白了,字条上奇怪的乱码实际上就是约会的时间“星期四 14:04”,因为前面两字符串中第1对相同的大写英文字母(大小写有区分)是第4个字母'D',代表星期四;第2对相同的字符是'E',那是第5个英文字母,代表一天里的第14个钟头(

将 Vue 打包生成的 dist 文件运行在你的服务器上(最全教程)_vue 运行dist_小浮夏的博客-程序员秘密

将 Vue 打包生成的 dist 文件运行在你的服务器上(最全教程)你可能需要用到的工具:PuTTY、FileZilla1 在服务器(CentOS)上安装 Node参考文章:https://zhuanlan.zhihu.com/p/1267047111️⃣在服务器上找好(创建) Node 的安装位置,例如:/usr/local/temp2️⃣在 Node 中文网下载 Node 安装压缩包3️⃣在第 1 步的安装位置处下载 Node 安装压缩包wget https://npm.t

高可用完全分布式搭建_DonviYang的博客-程序员秘密

成功截图历时一天,到晚上12点,终于搭建成功高可用的完全分布式。从下午三点到晚上九点6个小时一直在找之前的搭建错误,没有成功。遂删掉四台虚拟机,准备重头开始。从晚上接近十点到晚上12点,从创建虚拟机开始,花费两个小时,成功。可见,在动手之前大脑中应该有清晰的思路才能开始下手,否则,费时费力心寒。也可以看出,该删掉重来的时候不能犹豫,毕竟经过长时间的纠错之后,已经清楚了全部的坑。上图...

android fragment 退出程序,android – 应用程序在Fragment中单击后退按钮后关闭_简明杰的博客-程序员秘密

[UPDATE]问题解决了:只需在提交片段之前添加“addToBackStack(null)”:Fragment fragment = new WebBrowserFragment();fragment.setArguments(arguments);FragmentTransaction fragmentTransaction = getActivity().getFragmentManager...

android 中止应用程序,关于Android Studio:Android Studio – 如何(关闭,退出,退出,终止等)应用程序..._weixin_35945980的博客-程序员秘密

本问题已经有最佳答案,请猛点这里访问。首先,我已经尝试了几乎所有关于这个问题的解决方案,但是我找不到解决方案。问题:当用户在我的应用程序中按下退出按钮时,我想杀死所有的应用程序。有一些方法,如finish();或system.exit(0);如果我使用MainActivity,它们就是工作。我想要这个,如果我的主活动或者A活动或者B活动不重要的话,当我按下退出按钮的时候,只需要终止所有的应用程序并...

nginx的下载和安装_qq_40743512的博客-程序员秘密

nginx下载(查看官网stable代表的是稳定版)wget http://nginx.org/download/nginx-1.20.1.tar.gz先获取pcre支持yum install pcre-devel pcre -y解压nginx安装包并进入解压后的路径、tar xzf nginx-1.20.1.tar.gz cd nginx-1.20.1 修改nginx的版本号se...

随便推点

java crc32 c语言实现,C语言实现CRC32算法_小王ra康复的博客-程序员秘密

C语言实现CRC32算法2018年10月08日|萬仟网IT编程 |我要评论c语言实现crc32算法static const unsigned int crc32tab[] = {0x00000000l, 0x77073096l, 0xee0e612cl, 0xc语言实现crc32算法static const unsigned int crc32t...

为什么这个号总是不更新?_安卓进化论的博客-程序员秘密

大家好,我是张拭心。今天是个特殊的日子,首先祝大家节日快乐,即使单身也要快乐鸭!今天早下班了一会儿,想着回家陪小肉多待会儿,结果她突然多了一节课,我只好寂寞地躺在床上,百无聊赖地刷手机...

R语言编程艺术_weixin_30955617的博客-程序员秘密

《R语言编程艺术》基本信息原书名:The Art of R Programming:A Tour of Statistical Software Design作者: (美)Norman Matloff译者: 陈堰平 邱怡轩 潘岚锋 熊熹丛书名: 华章程序员书库出版社:机械工业出版社ISBN:9787111423140上架时间:2013-5-27出版日期:2013...

okhttp发送post请求携带json数据,并接收json数据_okhttppostjson_markyang088的博客-程序员秘密

okhttp工具类:package tools;import com.squareup.okhttp.*;import java.io.File;import java.io.IOException;import java.util.concurrent.TimeUnit;/** * @Auther: * @Date: 2018/12/14 11:47 * @Des...

BZOJ4198荷马史诗_Cynthia_wjyi的博客-程序员秘密

4198: [Noi2015]荷马史诗Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 240  Solved: 134[Submit][Status][Discuss]Description追逐影子的人,自己就是影子。 ——荷马Allison 最近迷上了文学。她喜欢在一个慵懒的午后,细细地品上一杯卡布奇诺,静静地阅读她爱不

决策树 BP神经网络(BPNN) SVM实现iris鸢尾花数据集的分类_机器学习中的bp神经网络、决策树、支持向量机svm以及kmeans算法对鸢尾花数据集进_慢慢dream的博客-程序员秘密

决策树 BP神经网络(BPNN) SVM实现iris鸢尾花数据集的分类决策树实现流程(详见代码)::1. 连续值处理iris数据集是连续数据, 因为连续属性的可取值数目不再有限,因此不能像处理离散属性枚举离散属性取值来对结点进行划分。因此需要连续属性离散化,这里对数据集的离散化策略是二分法,具体方法:​ 将连续属性a的取值从小到大排序, 将相邻的属性值的中位数作为候选划分点, 这样,n个属性值可得到n-1个候选划分点, 计算样本集基于每个划分点t二分后的信息增益, 选择信息增益最大的候选