У меня есть приложение, в котором я показываю сообщение с предупреждением, используя UIAlertView. По умолчанию цвет диалогового окна синий. Может ли кто-нибудь сказать мне, как изменить цвет этого? Можно ли это изменить?Как изменить цвет диалогового окна UIAlertView в iOS?
ответ
Использование Как Содержание этого
[CustomAlert setBackgroundColor:[UIColor blueColor]
withStrokeColor:[UIColor greenColor]];
.h и .m файла
CustomAlert.h
#import <UIKit/UIKit.h>
@interface CustomAlert : UIAlertView
{
}
+ (void) setBackgroundColor:(UIColor *) background
withStrokeColor:(UIColor *) stroke;
@end
CustomAlert.m
#import "CustomAlert.h"
@interface CustomAlert (Private)
- (void) drawRoundedRect:(CGRect) rect inContext:(CGContextRef)
context withRadius:(CGFloat) radius;
@end
static UIColor *fillColor = nil;
static UIColor *borderColor = nil;
@implementation CustomAlert
+ (void) setBackgroundColor:(UIColor *) background
withStrokeColor:(UIColor *) stroke
{
if(fillColor != nil)
{
[fillColor release];
[borderColor release];
}
fillColor = [background retain];
borderColor = [stroke retain];
}
- (id)initWithFrame:(CGRect)frame
{
if((self = [super initWithFrame:frame]))
{
if(fillColor == nil)
{
fillColor = [[UIColor blackColor] retain];
borderColor = [[UIColor colorWithHue:0.625
saturation:0.0 brightness:0.8 alpha:0.8]
retain];
}
}
return self;
}
- (void)layoutSubviews
{
for (UIView *sub in [self subviews])
{
if([sub class] == [UIImageView class] && sub.tag == 0)
{
// The alert background UIImageView tag is 0,
// if you are adding your own UIImageView's
// make sure your tags != 0 or this fix
// will remove your UIImageView's as well!
[sub removeFromSuperview];
break;
}
}
}
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextClearRect(context, rect);
CGContextSetAllowsAntialiasing(context, true);
CGContextSetLineWidth(context, 0.0);
CGContextSetAlpha(context, 0.8);
CGContextSetLineWidth(context, 2.0);
CGContextSetStrokeColorWithColor(context, [borderColor CGColor]);
CGContextSetFillColorWithColor(context, [fillColor CGColor]);
// Draw background
CGFloat backOffset = 2;
CGRect backRect = CGRectMake(rect.origin.x + backOffset,
rect.origin.y + backOffset,
rect.size.width - backOffset*2,
rect.size.height - backOffset*2);
[self drawRoundedRect:backRect inContext:context withRadius:8];
CGContextDrawPath(context, kCGPathFillStroke);
// Clip Context
CGRect clipRect = CGRectMake(backRect.origin.x + backOffset-1,
backRect.origin.y + backOffset-1,
backRect.size.width - (backOffset-1)*2,
backRect.size.height - (backOffset-1)*2);
[self drawRoundedRect:clipRect inContext:context withRadius:8];
CGContextClip (context);
//Draw highlight
CGGradientRef glossGradient;
CGColorSpaceRef rgbColorspace;
size_t num_locations = 2;
CGFloat locations[2] = { 0.0, 1.0 };
CGFloat components[8] = { 1.0, 1.0, 1.0, 0.35, 1.0, 1.0, 1.0, 0.06 };
rgbColorspace = CGColorSpaceCreateDeviceRGB();
glossGradient = CGGradientCreateWithColorComponents(rgbColorspace,
components, locations, num_locations);
CGRect ovalRect = CGRectMake(-130, -115, (rect.size.width*2),
rect.size.width/2);
CGPoint start = CGPointMake(rect.origin.x, rect.origin.y);
CGPoint end = CGPointMake(rect.origin.x, rect.size.height/5);
CGContextSetAlpha(context, 1.0);
CGContextAddEllipseInRect(context, ovalRect);
CGContextClip (context);
CGContextDrawLinearGradient(context, glossGradient, start, end, 0);
CGGradientRelease(glossGradient);
CGColorSpaceRelease(rgbColorspace);
}
- (void) drawRoundedRect:(CGRect) rrect inContext:(CGContextRef) context
withRadius:(CGFloat) radius
{
CGContextBeginPath (context);
CGFloat minx = CGRectGetMinX(rrect), midx = CGRectGetMidX(rrect),
maxx = CGRectGetMaxX(rrect);
CGFloat miny = CGRectGetMinY(rrect), midy = CGRectGetMidY(rrect),
maxy = CGRectGetMaxY(rrect);
CGContextMoveToPoint(context, minx, midy);
CGContextAddArcToPoint(context, minx, miny, midx, miny, radius);
CGContextAddArcToPoint(context, maxx, miny, maxx, midy, radius);
CGContextAddArcToPoint(context, maxx, maxy, midx, maxy, radius);
CGContextAddArcToPoint(context, minx, maxy, minx, midy, radius);
CGContextClosePath(context);
}
- (void)dealloc
{
[super dealloc];
}
@end
От Apple, класс UIAlertView предназначен для использования как есть и не поддерживает подклассы. Иерархия представления для этого класса является частной и не должна быть изменена. ', Вы уверены, что ваш подкласс работает правильно во всех случаях? Получили ли вы приложение, использующее этот класс, в App Store? – Daniel
ЭТО ВОЗМОЖНОЕ РЕШЕНИЕ ДЛЯ ВАС. https://github.com/simonb/SBTableAlert – Anand
Вы должны реализовать свой UIAlertView. Вы не можете изменить синий цвет по умолчанию.
От UIAlertView Class Reference:
предназначен класс UIAlertView использоваться как есть и не поддерживает подклассов. Иерархия представления для этого класса является частной и ее нельзя изменять.
использовать UIView, чтобы показать предупреждение, вместо того, чтобы использовать UIAlertView затем изменить цвет этой точки зрения, соответственно
- 1. Как изменить цвет диалогового окна
- 2. Как изменить цвет фона вокруг диалогового окна?
- 3. Цвет диалогового окна Android
- 4. Изменить цвет текста диалогового окна Android
- 5. Цвет рамки диалогового окна
- 6. изменить цвет фона диалогового окна win32api
- 7. Изменить цвет текста диалогового окна на 5.0+
- 8. JavaFX Как изменить цвет названия диалогового окна/окна?
- 9. Как изменить цвет текста UIAlertView?
- 10. Изменить цвет оттенков кнопок UIAlertview и UIActionsheet
- 11. Как изменить цвет кнопки в UIAlertView
- 12. Как изменить цвет фона диалогового окна JQuery UI?
- 13. Как изменить задний цвет диалогового окна jquery ui
- 14. Как изменить размер диалогового окна?
- 15. Как изменить размер диалогового окна?
- 16. изменить значок диалогового окна
- 17. Как изменить цвет границы диалогового окна Jface (или TitleAreaDialog)?
- 18. Как изменить цвет окна окна
- 19. Цвет диалогового окна Android Диалог
- 20. Как изменить фон диалогового окна android
- 21. Как изменить цвет окна
- 22. Как изменить цвет клавиатуры с UIAlertView
- 23. Как изменить размер диалогового окна в LWUIT?
- 24. Пользовательский цвет в UIAlertView
- 25. Изменить положение всплывающего диалогового окна
- 26. Цвет и название названия диалогового окна Android?
- 27. Изменить стиль UIAlertView
- 28. Как изменить размер всплывающего диалогового окна всплывающего окна в android
- 29. Как изменить положение диалогового окна JQuery
- 30. Как изменить положение диалогового окна прогресса?
пройти через это [обсуждалось ранее вопрос] [1] [1]: http://stackoverflow.com/questions/883208/change-the-background-color-of-a-uialertview –