UIAlertViewの背景色を変更したいのですが、色属性がないようです。
AlertViewの背景は画像であり、この画像を変更できます
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]];
また、ほぼ同一の回避策を見つけましたが、私の場合はよりうまくいきます。酸素を使って、画面上で悪い結果を発見し、コンテキストがぼやけます。 UIAlertViewをサブクラス化するのではなく、実装します。
- (void)willPresentAlertView:(UIAlertView *)alertView;
だから...ただコピー&ペースト
- (void)willPresentAlertView:(UIAlertView *)alertView
{
blah blah blah...
[[alertView layer] setContents:(id)theImage.CGImage]; // to avoid the warning
}
最近これが必要になり、UIAlertViewをサブクラス化しました。興味のある人向けのコードを次に示します。
http://kwigbo.com/post/318396305/iphone-sdk-custom-uialertview-background-color
さて、私は別の方法で問題を解決しました。背景画像を含むUIImageViewを検索し、画像を変更しました。
...まあショーはビューを変更するための最良の解決策ではないかもしれません...
@implementation CustomAlertView
- (void)show {
[super show];
for (UIView *view in self.subviews) {
NSLog(@"%@ with %i children", view, [view.subviews count]);
// change the background image
if ([view isKindOfClass:[UIImageView class]]) {
UIImage *theImage = [UIImage imageNamed:@"password entry bg - default.png"];
((UIImageView *)view).image = [theImage resizableImageWithCapInsets:UIEdgeInsetsMake(49, 8, 8, 8)];
}
}
}
@end
ブロックを活用し、TweetBotをモデルにした、より新しいソリューションを次に示します。
これは可能なことではありません。
独自のアラートタイプビュー(アニメーションの提供などを含む)を作成するか、Appleが提供するデフォルトのUIAlertViewを使用する必要があります。
AppleはUIAlertViewの色のようなものを公開しない傾向があるため、UIはすべてのアプリケーションにわたって共通の感触を持っています。アプリからアプリに色を変更することは、ユーザーを混乱させます。
QuartzCoreフレームワークをアプリケーションに追加し、ソースファイルに#import "QuartzCore/CALayer.h"を含めます。
最近、私はGRAlertViewを見つけました。これにより、少なくとも私が好きな簡単な方法でUIAlertViewを調整できます。ここにあります: https://github.com/goncz9/GRAlertView
これは私にとって最も堅牢なソリューションのようです
http://mobile.tutsplus.com/tutorials/iphone/ios-sdk-uialertview-custom-graphics/
これを使用する必要があります:
UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"You are Select Row of" message:@"Human" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
alert.backgroundColor=[UIColor redColor];
[alert show];
[alert release];
uIAlertViewの背景色が変更されます。
このコードを使用するだけで、
UIImage *theImage = [UIImage imageNamed:@"imageName.png"];
UIView *view=[alert valueForKey:@"_backgroundImageView"];
//Set frame according to adustable
UIImageView *image=[[UIImageView alloc] initWithImage:theImage];
[image setFrame:CGRectMake(0, 0, 280, 130)];
[view addSubview:image];