自定义AlertView与背景

时间:2011-07-14 11:19:03

标签: objective-c ios cocoa-touch uikit uialertview

每个人,我需要在UIAlertView上设置一个图像..

enter image description here

我附上了我的UIAlertview图像问题..

我使用过此代码行..

UIAlertView *theAlert = [[[UIAlertView alloc] initWithTitle:@"Atention"
   message: @"YOUR MESSAGE HERE", nil)
   delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] autorelease];

   [theAlert show];

   UILabel *theTitle = [theAlert valueForKey:@"_titleLabel"];
   [theTitle setTextColor:[UIColor redColor]];

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

   UIImage *theImage = [UIImage imageNamed:@"Background.png"];    
   theImage = [theImage stretchableImageWithLeftCapWidth:16 topCapHeight:16];
   CGSize theSize = [theAlert frame].size;

   UIGraphicsBeginImageContext(theSize);    
   [theImage drawInRect:CGRectMake(0, 0, theSize.width, theSize.height)];    
   theImage = UIGraphicsGetImageFromCurrentImageContext();    
   UIGraphicsEndImageContext();

   [[theAlert layer] setContents:[theImage CGImage]];

请解决此问题.. 我只需要提醒图像..

3 个答案:

答案 0 :(得分:6)

试试这个......

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"UIAlert View" message:@"hello" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:@"Close",nil];

UIImage *alertImage = [UIImage imageNamed:@"plus.png"];

UIImageView *backgroundImageView = [[UIImageView alloc] initWithImage:alertImage];

backgroundImageView.frame = CGRectMake(0, 0, 282, 130);

backgroundImageView.contentMode = UIViewContentModeScaleToFill;

[alert addSubview:backgroundImageView];

[alert sendSubviewToBack:backgroundImageView]; 
[alert show];
[alert release];

答案 1 :(得分:4)

您应该考虑不使用UIAlertView,但有自己的AlertView请参阅TSAlertView以获取替代实现,而不是从UIAlertView派生。

TSAlertView允许您设置自己的背景图像。


我不推荐的另一个解决方案可能是:

您可以使用introspection:遍历UIAlertViews子视图,识别隐藏背景图像的那个子视图,并将自己的背景图像放在原始图像视图下方/上方的索引处。


我找到了这个项目:Subclass UIAlertView to customize the look of an alert。它不适用于iOS 4.2+,但凭借我的内省想法,您可以再次使用它:

-layoutSubviews的{​​{1}}更改为:

JKCustomAlert

我不承诺,这个技巧将适用于iOS的未来版本

答案 2 :(得分:0)

我喜欢使用的解决方案是向ViewController添加一个UIView,它模仿警报的外观。 UIAlertView的另一个属性是,在解除警报之前,不能使用应用程序的任何其他部分。通过使你的UIView成为另一个UIView(具有清晰的背景)的子视图,可以很容易地模仿它,它占据了整个屏幕。

如果您不想自己实施,可以使用以下自定义提醒视图课程:https://github.com/shivsak/CustomAlertView