使用代理和block写一个alertView
代理:
MyAlertView.h:
@property (nonatomic,assign)id delegate; @protocol MyAlertViewDelegate <NSObject> - (void)myAlertView:(MyAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex; @end
MyAlertView.m:
- (void)buttonClick:(id)sender
{
UIButton *button = (UIButton *)sender;
int index = (int)button.tag - ; if ([self.delegate respondsToSelector:@selector(myAlertView:clickedButtonAtIndex:)]) {
[self.delegate myAlertView:self clickedButtonAtIndex:index];
}
[self disappear];
}
调用处ViewController:
- (void)myAlertView:(MyAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
NSLog(@"buttonIndex:%d",buttonIndex);
}
使用block:
MyAlertView.h: //使用copy 而不是retain ,因为block 变量是声明在栈上的,retain之后还是在栈上,方法结束,栈的内存就被系统自动释放,copy 可以把一个block 变量从栈上拷贝到堆上,堆上的内存由引用计数管理,所以我们就能自己决定block的释放。
@property (nonatomic,copy)void (^buttonClick)(int);
MyAlertView.m:
- (void)buttonClick:(id)sender
{
UIButton *button = (UIButton *)sender;
int index = (int)button.tag - ; self.buttonClick(index); [self disappear];
}
调用处ViewController:
alertView.buttonClick = ^(int index){
NSLog(@"buttonIndex:%d",buttonIndex);
};
UILabel类别自适应高度
#import <UIKit/UIKit.h> @interface UILabel (AutoFitSize) +(UILabel *)getInfoLabel:(UILabel *)label withText:(NSString *)ktext withFont:(UIFont *)kfont withtosize:(CGRect)krect withBackGroundColor:(UIColor *)kbackgroundColor; @end
#import "UILabel+AutoFitSize.h" //判断是否是IOS7以上的系统(包含IOS7)
#define bIos7 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0?YES : NO) @implementation UILabel (AutoFitSize) #if __IPHONE_OS_VERSION_MAX_ALLOWED < 70000 +(UILabel *)getInfoLabel:(UILabel *)label withText:(NSString *)ktext withFont:(UIFont *)kfont withtosize:(CGRect)krect withBackGroundColor:(UIColor *)kbackgroundColor
{
label.font=kfont;
label.text = ktext;
label.textColor = [UIColor blackColor];
label.textAlignment = NSTextAlignmentCenter;
label.backgroundColor=kbackgroundColor; label.numberOfLines=;
label.lineBreakMode=NSLineBreakByTruncatingTail;
//内容显示 高度自适应
CGSize sizeToFit =[ktext sizeWithFont:font constrainedToSize:CGSizeMake(krect.size.width,)lineBreakMode:NSLineBreakByWordWrapping];
label.frame=CGRectMake(krect.origin.x,krect.origin.y,sizeToFit.width, sizeToFit.height);;
return label;
} #else +(UILabel *)getInfoLabel:(UILabel *)label withText:(NSString *)ktext withFont:(UIFont *)kfont withtosize:(CGRect)krect withBackGroundColor:(UIColor *)kbackgroundColor
{
label.text = ktext;
label.font = kfont;
label.textColor = [UIColor blackColor];
label.textAlignment = NSTextAlignmentCenter;
label.backgroundColor = kbackgroundColor; label.numberOfLines =;
label.lineBreakMode =NSLineBreakByTruncatingTail ;
//高度估计文本大概要显示几行,宽度根据需求自己定义。 MAXFLOAT 可以算出具体要多高
CGSize size =CGSizeMake(krect.size.width,);
NSDictionary * tdic = [NSDictionary dictionaryWithObjectsAndKeys:kfont,NSFontAttributeName,nil];
//ios7方法,获取文本需要的size,限制宽度
CGSize actualsize =[ktext boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin attributes:tdic context:nil].size;
label.frame=CGRectMake(krect.origin.x,krect.origin.y,actualsize.width, actualsize.height); return label;
} #endif @end
代码地址:http://pan.baidu.com/s/1hqAKp3u
使用代理和block写一个alertView的更多相关文章
- iOS:用Block写一个链式编程
一.介绍 链式编程是一个比较新颖的编程方式,简单直观,用起来也比较舒服.目前比较有名的Mansory和BabyBlueTooth就是使用链式编程写的第三方框架. 二.写法 链式编程写法不同于传统方式, ...
- 代理和 block 传值的使用
// // ZYViewController.h // BlockTest // // Created by yejiong on 14/11/2. // Copyright © 2014年 zzz. ...
- Swift基础--通知,代理和block的使用抉择以及Swift中的代理
什么时候用通知,什么时候用代理,什么时候用block 通知 : 两者关系层次太深,八竿子打不着的那种最适合用通知.因为层级结构深了,用代理要一层一层往下传递,代码结构就复杂了 代理 : 父子关系,监听 ...
- iOS中的代理和Block
一.代理(Delegate) 1)含义 iOS中的代理,比如父母要去上班,到中午12点了,需要给宝宝喂饭吃,但是父母正在上班,这时需要有一个人来帮忙完成一些事情(需要有个保姆来帮忙给宝宝喂饭),此时, ...
- 代理和block反向传值
代理传值: // SendViewController.h #import <UIKit/UIKit.h> @protocol SendInFor <NSObject> -(v ...
- 写一个基于NSURLSession的网络下载库
前段时间AFNetworking 更新到3.0 ,彻底废弃NSURLConnection的API转由NSURLSession来实现,代码并没有改动很大,AF封装的很好了,读完源码感觉收获很大. 下载不 ...
- 通过一个工具类更深入理解动态代理和Threadlocal
动态代理和Threadlocal 一个代理类返回指定的接口,将方法调用指定的调用处理程序的代理类的实例.返回的是一个代理类,由指定的类装载器的定义和实现指定接口指定代理实例调用处理程序最近用到一个工具 ...
- 从 0 开始手写一个 Mybatis 框架,三步搞定!
阅读本文大概需要 3 分钟. MyBatis框架的核心功能其实不难,无非就是动态代理和jdbc的操作,难的是写出来可扩展,高内聚,低耦合的规范的代码. 本文完成的Mybatis功能比较简单,代码还有许 ...
- 总结两种动态代理jdk代理和cglib代理
动态代理 上篇文章讲了什么是代理模式,为什么用代理模式,从静态代理过渡到动态代理. 这里再简单总结一下 什么是代理模式,给某个对象提供一个代理对象,并由代理对象控制对于原对象的访问,即客户不直接操控原 ...
随机推荐
- 关于分页接口设计(下拉刷新上拉加载原理,解决page count请求重复数据的问题)
- 触发器运用示例---laobai
1 触发器 概念:trigger.逻辑对象的一种.当dml的增删改语句执行时,自动触发一系列动作. 分类:dml触发器.ddl触发器(很少见) sql:ddl,dml,dcl 按触发的时间分: 语句执 ...
- 基于 Arduino 的 RFID 识别实验
http://www.it165.net/embed/html/201512/3287.html 2015年12月04日(周五) 上午 博士的智能卡实验--RFID识别实验,基于51单片机: 我们的 ...
- Mono-D在MacOS上的设置
1. 下载DMD 建议下载tar.xz压缩包,不建议下载dmg安装包,因为dmg中没有src,而后面需要用src中的内容设置代Code Completion. 地址:http://dlang.org/ ...
- struts2 s:file标签使用及文件上传例子
<s:form action="uploadaction" method="post" enctype="multipart/form-da ...
- Centos下安装jdk
下载 由于oracle官网下载jdk需要网站验证,所以不能使用wget直接下载. 一种比较快的方式是在本地下载tar.gz或者rpm,之后上传到Linux. tar.gz格式只需解压,放到指定目录下, ...
- GDI+ 笔记
1.GDI+模板 #include<windows.h> #include<GdiPlus.h> #include <time.h> #include <ma ...
- 进阶系列五【绝对干货】----Git教程
一.介绍 1.1Git是什么? Git是目前世界上最先进的分布式版本控制系统.什么是版本控制系统?请自行百度. 1.2Git与SVN对比有什么特点? SVN是集中式版本控制系统.版本库是集中放在中央服 ...
- javascript中的冒泡排序
冒泡排序:就是将一个数组中的元素按照从大到小或者从小到大的顺序进行排列. var array=[9,8,7,6,5,4,3,2,1]; 第一轮比较:8,7,6,5,4,3,2,1,9 交换了 ...
- redis该如何分区-译文(原创)
写在最前,最近一直在研究redis的使用,包括redis应用场景.性能优化.可行性.这是看到redis官网中一个链接,主要是讲解redis数据分区的,既然是官方推荐的,那我就翻译一下,与大家共享. P ...