从AlertView例解设置view背景的几种方法

   UIAlertView *alv_obj = [[[UIAlertView alloc] initWithTitle:@"AlertView" 
                                              message:@"This is Example!" 
                                              delegate:nil 
                                              cancelButtonTitle:@"cancel" 
                                              otherButtonTitles:@"confirm", nil] autorelease];
[alv_obj show];


// undocument API UIAlertView类头文件里面带 “ _”的成员是可以通过 valueforkey来引用的。但这些都是不公开的,私有方法 通过字典的方式取出其对象就可以操作其属性。如下:
UILabel *theTitle = [alv_obj valueForKey:@"_titleLabel"];
[theTitle setTextColor:[UIColor greenColor]];

UILabel *theBody = [alv_obj valueForKey:
@"_bodyTextLabel"];
[theBody setTextColor:[UIColor blueColor]];


/* 第一种自定义方法*/
UIImageView *imgv = [alv_obj 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 = [alv_obj frame].size;

UIGraphicsBeginImageContext(theSize);
[theImage drawInRect:CGRectMake(0, 0, theSize.width, theSize.height)];
theImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
alv_obj.layer.contents = (id)[theImage CGImage]; // iOS4.0开始不支持contents属性
/* 第三种自定义方法*/
   //遍历alv_obj对象的子view,获取其UIImageView视图
   for (UIView *v in [alv_obj subviews]) {
      if ([v isKindOfClass:[UIImageView class]]) {
      UIImage *theImage = [UIImage imageNamed:@"loveChina.png"];
     ((UIImageView *)v).image = theImage;
     }
   }



/* 第四种自定义方法 */
UIView *additionBackgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, alv_obj.frame.size.width-30, alv_obj.frame.size.height-20)];
additionBackgroundView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"loveChina.png"]];
#if TARGET_IPHONE_SIMULATOR
[alv_obj insertSubview:additionBackgroundView atIndex:1];
#else
[alv_obj insertSubview:additionBackgroundView atIndex:0];
#endif
[additionBackgroundView release];

  /*第五种自定义代码*/

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

[theAlert show];
[theAlert release];



本质:作为复合控件,UIAlertView是由多个基本控件组合而成,每个基本控件的功能也是UIAlertView的功能的有效组成部分。所以,我们想修改UIAlertView的某个属性,可以通过修改控制UIAlertView的该属性的基本控件而达到目的。这是一个整体和局部的分析方法。例如本例,我们想修改UIAlertView的背景图,就是通过获取到控制UIAlertView的背景图的子控件UIImageView
而达到目的的


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自定义UIAlertView方法已经在iOS13之后被废弃,推荐使用UIAlertController来代替。下面介绍如何自定义UIAlertController的弹出位置以及宽度。 1. 自定义弹出位置 可以使用UIAlertController的popoverPresentationController属性来设置弹出位置。具体步骤如下: ``` // 创建UIAlertController对象 UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Title" message:@"Message" preferredStyle:UIAlertControllerStyleAlert]; // 创建弹出位置的UIView对象 UIView *popoverView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)]; // 设置弹出位置 alertController.popoverPresentationController.sourceView = popoverView; alertController.popoverPresentationController.sourceRect = popoverView.bounds; // 弹出UIAlertController [self presentViewController:alertController animated:YES completion:nil]; ``` 2. 自定义宽度 可以通过设置UIAlertController的preferredContentSize属性来改变其宽度。具体步骤如下: ``` // 创建UIAlertController对象 UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Title" message:@"Message" preferredStyle:UIAlertControllerStyleAlert]; // 设置宽度 alertController.preferredContentSize = CGSizeMake(280, 200); // 弹出UIAlertController [self presentViewController:alertController animated:YES completion:nil]; ``` 需要注意的是,此方法只适用于UIAlertControllerStyleAlert风格的UIAlertController。如果使用UIAlertControllerStyleActionSheet风格的UIAlertController,设置preferredContentSize属性将不会生效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值