zoukankan      html  css  js  c++  java
  • [原创] 自定义UIAlertView

    //
    //  MyAlertView.h
    //  MyAlertIView
    //
    //  Created by 金春浩 on 13-5-31.
    //  Copyright (c) 2013年 jinchunhao. All rights reserved.
    //

    #import <UIKit/UIKit.h>
    @protocol MyAlertViewDelegate <NSObject>

    @optional
    - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex;
    @end
    @interface MyAlertView : UIAlertView
    @property(nonatomic, assign) id<MyAlertViewDelegate> myyAlertViewDelegate;
    @property(nonatomic, retain) UIImage *backgroundImage;
    @property(nonatomic, retain) UIImage *contentImage;
    @property(nonatomic, retain) UIImage *btnImage;
    @property (nonatomic,retain) NSString * cancelText;
    @property (nonatomic,retain) NSString * ConfrimText;
    @property(nonatomic,retain) NSString * titile;
    @property(nonatomic,retain) NSString * detail;
    @property(nonatomic,assign) int btncount;

    - (void)show;
    - (id)initWithImage:(UIImage *)image contentImage:(UIImage *)content;
    - (id)initWithImage:(UIImage *)image contentImage:(UIImage *)content rect:(CGRect) frame;
    - (id)initWithImage:(UIImage *) image
           contentImage:(UIImage *)
       content btnImage:(UIImage *) btnimg
                  title:(NSString *) titlemsg
                 detail:(NSString *)detailmsg
              delegate:(id) delegate
          cancelbtnText:(NSString *) cacelbtntext
         confirmbtnText:(NSString *) confirmbtntext
                  frame:(CGRect) frame;
    @end

    //
    //  MyAlertView.m
    //  MyAlertIView
    //
    //  Created by 金春浩 on 13-5-31.
    //  Copyright (c) 2013年 jinchunhao. All rights reserved.
    //

    #import "MyAlertView.h"

    @implementation MyAlertView
    @synthesize myyAlertViewDelegate;
    @synthesize backgroundImage;
    @synthesize contentImage;
    @synthesize btnImage;
    @synthesize cancelText;
    @synthesize ConfrimText;
    @synthesize btncount;
    @synthesize titile;
    @synthesize detail;
    @synthesize ifLeftOrRight;


    - (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;
    }
    - (id)initWithImage:(UIImage *)image contentImage:(UIImage *)content rect:(CGRect) frame{
     
           self = [super initWithFrame:frame];

        if (self) {
            self = [super initWithFrame:frame];
            if (self) {
                
            }
            
        }
       
           return  self;
    }
    - (id)initWithImage:(UIImage *) image
                         contentImage:(UIImage *)
                        content btnImage:(UIImage *) btnimg
                        title:(NSString *)titlemsg
                        detail:(NSString *)detailmsg
                        delegate:(id) delegate
                        cancelbtnText:(NSString *) cacelbtntext
                        confirmbtnText:(NSString *) confirmbtntext
                        frame:(CGRect) frame{
       
        self = [super init];
        [self sizeToFit];
        //默认是有两个按钮
        self.btncount=2;
        if (self){
        if(image){
               self.backgroundImage=image;
                
            }
            if(content){
               self.contentImage=content;
            }
             if(btnimg){
             
                self.btnImage=btnimg;
            }
            
            if(cacelbtntext){
                self.cancelText=cancelText;
            
            }
            if(confirmbtntext){
                self.ConfrimText=confirmbtntext;
            
            }else{
                //当没有右边的按钮的时候,表示只有一个按钮
                self.btncount=1;
            
            }
            if(titlemsg){
                self.titile=titlemsg;
            
            }
            if(detailmsg){
                self.detail=detailmsg;
            }
            self.myyAlertViewDelegate=delegate;
            
        }

        return  self;

    }
    - (void)drawRect:(CGRect)rect
    {
       
        //self.backgroundColor=[UIColor blackColor];
        //根据方向的改变重绘背景图片时会正常显示
        self.autoresizingMask=UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleBottomMargin;
            CGSize imageSize = self.backgroundImage.size;
        [self.backgroundImage drawInRect:CGRectMake(0, 0, imageSize.width, imageSize.height)];
        //每次都要重新设置
        self.bounds = CGRectMake(0, 0, imageSize.width,imageSize.height);
         
    }
    - (void) 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];
            }
        }
        if (contentImage) {
            UIImageView *contentview = [[UIImageView alloc] initWithImage:self.contentImage];
            contentview.frame = CGRectMake(0, 0, self.backgroundImage.size.width, self.backgroundImage.size.height-20);
            [self addSubview:contentview];
        }
        UILabel *titlelbl = [[UILabel alloc]  initWithFrame:CGRectMake(100, 15, 100, 25)];
        titlelbl.backgroundColor=[UIColor clearColor];
        titlelbl.textColor=[UIColor whiteColor];
        titlelbl.font = [UIFont boldSystemFontOfSize:14.0f];
        titlelbl.numberOfLines = 0;// 不可少Label属性之一
        titlelbl.textAlignment = NSTextAlignmentCenter;
        
        //自动折行设置
        titlelbl.lineBreakMode = NSLineBreakByCharWrapping;
        
         if(self.titile){
        
            titlelbl.text = self.titile;
         }
        [self addSubview:titlelbl];
        UIScrollView * lblview=[[UIScrollView alloc] initWithFrame:CGRectMake(40, 40, 230, 38)];
        lblview.scrollEnabled=YES;
        lblview.multipleTouchEnabled=NO;
        
        UILabel *detaillbl = [[UILabel alloc]  initWithFrame:CGRectMake(0, 0, 230, 38)];
        detaillbl.backgroundColor=[UIColor clearColor];
        detaillbl.textColor=[UIColor whiteColor];
        detaillbl.font = [UIFont boldSystemFontOfSize:15.0f];
        detaillbl.numberOfLines = 0;// 不可少Label属性之一
        //detaillbl.textAlignment = NSTextAlignmentLeft;
        //自动折行设置
        titlelbl.lineBreakMode = NSLineBreakByCharWrapping;
        if(self.detail){
            //计算该字符串所占用的高度,然后动态设置scriollview和label标签高度!
            UIFont *font = [UIFont systemFontOfSize:15];
            detaillbl.text = self.detail;
            CGSize size = [self.detail sizeWithFont:font constrainedToSize:CGSizeMake(lblview.frame.size.width ,1000) lineBreakMode:NSLineBreakByWordWrapping];
            lblview.contentSize=size;
            detaillbl.frame=CGRectMake(0, 0, 230, size.height);
        }
        
        [lblview addSubview:detaillbl];
        [self addSubview:lblview];
           
        //当只有一个按钮的时候
        if(self.btncount==1){
            CGRect rc= CGRectMake(60, 100, 160, 36);
            [self getCancelbtn:rc];
          //两个按钮都在
        }else if(self.btncount==2){
            CGRect rc= CGRectMake(30, 100, 90, 36);
            [self getCancelbtn:rc];
            [self getConfrimbtn];
            
        }

    }
    //右边确认按钮
    -(void) getConfrimbtn{

        UIButton *confrimbtn = [[UIButton alloc] initWithFrame:CGRectMake(160, 100, 90, 36)];
        confrimbtn.tag = 1;
        [confrimbtn addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
        confrimbtn.titleLabel.font=[UIFont systemFontOfSize:15];
        [self addSubview:confrimbtn];
        
        if(self.ConfrimText){
            
            [confrimbtn setTitle:self.ConfrimText forState:UIControlStateNormal];
        }else{
            [confrimbtn setTitle:@"确定" forState:UIControlStateNormal];
            
            
        }
        if(self.btnImage){
            
            [confrimbtn setBackgroundImage:self.btnImage forState:UIControlStateNormal];
        }

    }

    //左边确认按钮
    -(void)getCancelbtn:(CGRect) rect{
        UIButton *cancelbtn = [[UIButton alloc] initWithFrame:rect];
        cancelbtn.tag = 0;
        if(self.cancelText){
            [cancelbtn setTitle:self.cancelText forState:UIControlStateNormal];
        }else{
            
            [cancelbtn setTitle:@"取消" forState:UIControlStateNormal];
        }
        if(self.btnImage){
            
            [cancelbtn setBackgroundImage:self.btnImage forState:UIControlStateNormal];
        }
        [cancelbtn addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
         cancelbtn.titleLabel.font=[UIFont systemFontOfSize:15];
        [self addSubview:cancelbtn];

    }

    -(void) buttonClicked:(id)sender
    {
        UIButton *btn = (UIButton *) sender;
        
        if (myyAlertViewDelegate) {
            if ([myyAlertViewDelegate respondsToSelector:@selector(alertView:clickedButtonAtIndex:)])
            {
                [myyAlertViewDelegate 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{
        [backgroundImage release];
        [contentImage release];
        [detail release];
        [titile release];
        [btnImage release];
        [cancelText release];
        [ConfrimText release];
        [super dealloc];

    }
    @end

    调用

     UIImage * bgimg=[UIImage imageNamed:@"alertviewbg2.png"];
     UIImage * btnimg=[UIImage imageNamed:@"btnbg"];

     MyAlertView * myalert=[[MyAlertView alloc] initWithImage:bgimg contentImage:bgimg btnImage:btnimg title:@"提示" detail:@"infsadaafasfasdfo" delegate:self cancelbtnText:@"取消" confirmbtnText:@"确定" frame:CGRectZero];

        [myalert show];
        [myalert release];

  • 相关阅读:
    OneSQL安装
    Dropbox可伸缩性设计最佳实践分享
    软件开发实践的24条军规
    最精彩的英语学习经验总结:俺的英语之路
    Facebook和Google如何激发工程师的创造力
    十种更好的表达“你的代码写的很烂”的方法
    一次java程序的重构
    漂亮代码
    一段代码引发的思考
    最难忘的Bug调试经历
  • 原文地址:https://www.cnblogs.com/jinjiantong/p/3116399.html
Copyright © 2011-2022 走看看