使用代理和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 - 10;

    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:@property (nonatomic,copy)void (^buttonClick)(int);
MyAlertView.m:- (void)buttonClick:(id)sender
{
    UIButton *button = (UIButton *)sender;
    int index = (int)button.tag - 10;

    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=0;
    label.lineBreakMode=NSLineBreakByTruncatingTail;
    //内容显示  高度自适应
    CGSize sizeToFit =[ktext sizeWithFont:font constrainedToSize:CGSizeMake(krect.size.width,10000)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 =0;
    label.lineBreakMode =NSLineBreakByTruncatingTail ;
    //高度估计文本大概要显示几行,宽度根据需求自己定义。 MAXFLOAT 可以算出具体要多高
    CGSize size =CGSizeMake(krect.size.width,10000);
    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

时间: 2024-10-18 23:59:41

使用代理和block写一个alertView的相关文章

iOS:用Block写一个链式编程

一.介绍 链式编程是一个比较新颖的编程方式,简单直观,用起来也比较舒服.目前比较有名的Mansory和BabyBlueTooth就是使用链式编程写的第三方框架. 二.写法 链式编程写法不同于传统方式,初次写起来比较别扭,但是一旦习惯了,用起来比较得心应手.那么,如何写呢?其实就是一个对象调用它的实例方法后返回一个block(已经定义过),而这个block内部又返回该对象.依此类推,该对象不论调用多少个它的实例方法,最终都会返回该对象本身. 三.实例 LearnManager类定义和实现 // /

代理和 block 传值的使用

// // ZYViewController.h // BlockTest // // Created by yejiong on 14/11/2. // Copyright © 2014年 zzz. All rights reserved. // #import <UIKit/UIKit.h> //1.声明一个 delegate 协议. @protocol ZYViewControllerDelegate <NSObject> //声明一个方法用来传值. //返回值表明传值的结果

代理和block反向传值

代理传值: // SendViewController.h #import <UIKit/UIKit.h> @protocol SendInFor <NSObject> -(void)sendInForIdea:(NSString*)text; @end @protocol SendInForTwo <NSObject> -(void)sender:(NSString*)text; @end @interface SendViewController : UIViewC

IOS 代理和block的对比

一.block 方法从子视图向父视图传递值. 案例:使用block方式子视图向父视图传值.在子视图.h定义block,定义方法.在.m文件实例化方法.然后再主视图实例化子视图是使用block并传入相应的代码,在子视图点击的 addtarget下执行 父视图的传入的快代码.block这个流程清晰,比代理协议的跳跃性要小. .定义快代码 //在子视图的.h文件中 //定义快代码 typedef void(^textFieldChangedBlock)(NSString *text); - (id)i

从 0 开始手写一个 Mybatis 框架,三步搞定!

阅读本文大概需要 3 分钟. MyBatis框架的核心功能其实不难,无非就是动态代理和jdbc的操作,难的是写出来可扩展,高内聚,低耦合的规范的代码. 本文完成的Mybatis功能比较简单,代码还有许多需要改进的地方,大家可以结合Mybatis源码去动手完善. 1. Mybatis框架流程简介 在手写自己的Mybatis框架之前,我们先来了解一下Mybatis,它的源码中使用了大量的设计模式,阅读源码并观察设计模式在其中的应用,才能够更深入的理解源码(ref:Mybatis源码解读-设计模式总结

JDK动态代理和CGLIB动态代理+源码下载

在上一篇文章-java代理详解讲解实现机制,一种是继承另外一种是组合,而且通过做实现也证明使用组合的方式更加的灵活.之后提到了代理的两种种类,一种是静态代理,另外一种是动态代理.上一篇文件中着重介绍的是静态代理(相对于动态代理很容易理解).这一片文章就接着介绍动态代理. 动态代理实现的最终效果:通过以一个统一的方式实现对任意的接口/类的代理.相比较静态代理而言,我们可以不用再无限制的增加代理类,不用再写许多重复的代码.很符合面向对象设计原则中的"开闭原则":对修改关闭,对扩展开放. 动

关于JDK动态代理和CGLIB动态代理

1. 代理模式 一句话总结:为其他对象提供一种代理以控制对这个对象的访问.千篇一律的介绍:代理模式是常用的java设计模式,他的特征是代理类与委托类(或目标类)有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务. 按照代理的创建时期,代理类可以分为两种. 静态代理:由程序员创建或特定工具

JDK动态代理和Cglib的动态代理

最简单的是静态代理方法,即代理模式,这里就不多啰嗦了.. 重点说一下JDK的动态代理和Cglib的动态代理吧 先说JDK的,需要被代理的类需要有接口,否则无法实现 package proxy.dynamic; public interface IBook { void add(); } 实现接口的类如下 package proxy.dynamic; public class Book implements IBook { @Override public void add() { System.

黑马程序员_代理和AOP(一)

/** * 代理和AOP(一) * * 1.分析代理类的作用与原理及AOP的概念 * * 1.1 代理类:一个代理类通常有自己的代理目标类,代理类是对目标类的代理,一般代理类的方法和目标类的方法签名一致,是对 * 目标类的包装,代理类的各个方法中通常除了要调用目标的相应方法和对外返回目标的方法返回的结果之外, * 还可以在代理类的方法中 加入一些系统功能代码,添加的位置有四个地方: * 分别是目标方法调用前,目标方法调用后,目标方法调用前后,在处理目标方法异常的catch块中. * 例如: *