关于自定义AlertView背景的方法收集

从网上收集了一些自定义AlertView背景的方法,汇总一下以便有需要时使用。


UIAlertView *theAlert = [[[UIAlertView alloc] initWithTitle:@"Atention" message:@"我是中国人!" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil] autorelease];
    [theAlert show];
    
    // undocument API UIAlertView类头文件里面带 “ _”的成员是可以通过 valueforkey来引用的。但这些都是不公开的,私有方法
    UILabel *theTitle = [theAlert valueForKey:@"_titleLabel"];
    [theTitle setTextColor:[UIColor greenColor]];
    
    UILabel *theBody = [theAlert valueForKey:@"_bodyTextLabel"];
    [theBody setTextColor:[UIColor blueColor]];
    
    /* 第一种自定义方法
    //
     UIImageView *imgv = [theAlert valueForKey:@"_backgroundImageView"];
     imgv.image = [UIImage imageNamed:@"loveChina.png"];
    */
    //
    
    /* 第二种自定义方法,因有过期属性的使用,所以新版iOS中无效
    //
    // undocument API
    UIImage *theImage = [UIImage imageNamed:@"loveChina.png"];
    theImage = [theImage stretchableImageWithLeftCapWidth:0.0 topCapHeight:0.0];
    CGSize theSize = [theAlert frame].size;
    
    UIGraphicsBeginImageContext(theSize);
    [theImage drawInRect:CGRectMake(0, 0, theSize.width, theSize.height)];
    theImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    theAlert.layer.contents = (id)[theImage CGImage]; // iOS4.0开始不支持contents属性
    */
    //
    
    /* 第三种自定义方法
    //遍历theAlert对象的子view,获取其UIImageView视图
    for (UIView *v in [theAlert subviews]) {
        if ([v isKindOfClass:[UIImageView class]]) {
            UIImage *theImage = [UIImage imageNamed:@"loveChina.png"];
            ((UIImageView *)v).image = theImage;
        }
    }
    */
    
    /* 第四种自定义方法 */
    UIView *additionBackgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, theAlert.frame.size.width-30, theAlert.frame.size.height-20)];
    additionBackgroundView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"loveChina.png"]];
#if TARGET_IPHONE_SIMULATOR
    [theAlert insertSubview:additionBackgroundView atIndex:1];
#else
    [theAlert insertSubview:additionBackgroundView atIndex:0];
#endif
    
    [additionBackgroundView release];

第五种自定义代码:

 1 UIAlertView *theAlert = [[[UIAlertView alloc] initWithTitle:@"Atention" message:@"我是中国人!" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil] autorelease];
 2 UIImage *alertImage = [UIImage imageNamed:@"loveChina.png"];
 3 UIImageView *backgroundImageView = [[UIImageView alloc] initWithImage:alertImage];
 4 backgroundImageView.frame = CGRectMake(0, 0, 282, 160);
 5 backgroundImageView.contentMode = UIViewContentModeScaleToFill;
 6 [theAlert addSubview:backgroundImageView];
 7 [theAlert sendSubviewToBack:backgroundImageView];
 8 
 9 [theAlert show];
10 [theAlert release];

运行效果如图:

第六种方式:使用一个定义扩展类JKCustomAlert (网上有下载)。
调用代码:

UIImage *backgroundImage = [UIImage imageNamed:@"Splatter.png"];
alert = [[JKCustomAlert alloc] initWithImage:backgroundImage text:NSLocalizedString(@"game over", nil)];
[alert show];

运行效果图:


为了在iOS4.2以上也有效,需增加些代码来手动隐藏原AlertView的背景视图:修改layoutSubviews方法

- (void) layoutSubviews {
     for (UIView *v in [self subviews]) {
         if ([v class] == [UIImageView class]) {
             [v setHidden:YES];
         }
     }
     
     //原来的代码继续
 }




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值