How to create custom UIAlertView
We're creating an immersive app that needs to have something that acts rather similar to a UIAlertView
, but we don't want it to look like a system dialog, we want to use our own graphics. I've got a big chunk of the work done, but there are a few snags I've hit:
How do I make the UIView show up above the status bar (so that I can darken in, like a
UIAlertView
does)? Is this possible? I've added it to the window, but it still shows up underneath the status bar.How do I show it partially transparent but have the text still fully opaque? I want it to be shown similar to a
UIAlertView
in that it should be translucent, but if I set alph开发者_运维知识库a to .8, that also decreases the alpha of subviews. If I only decrease the alpha of the background image, then the buttons appear opaque. If I decrease the alpha of the background image and the buttons, then the buttons don't look like they are embedded in the background image. I would very much like to not have to create a different image for each arrangement of embedded buttons
Edit: I haven't yet found a solution to the status bar issue, but I've noticed that a standard UIAlertView shows up in its own UIWindow, and when I investigated that, I found the windowLevel property:
const UIWindowLevel UIWindowLevelNormal;
const UIWindowLevel UIWindowLevelAlert;
const UIWindowLevel UIWindowLevelStatusBar;
Using my own UIWindow with UIWindowLevelAlert
still didn't make it show up above the status bar. I didn't try UIWindowLevelStatusBar
.
You need to create a new Window where you can put your alert view:
UIWindow *alertWindow = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // you must release the window somewhere, when you do not need it anymore
alertWindow.windowLevel = UIWindowLevelAlert; // puts it above the status bar
alertWindow.backgroundColor = [UIColor clearColor];
UIViewController *alertVC = [[[YourAlertViewController alloc] init] autorelease];
[alertWindow setRootViewController:alertVC];
[alertWindow setHidden:NO];
Seems an old post but if you hit this page looking for an answer check this out
http://joris.kluivers.nl/iphone-dev/?p=CustomAlert
How do I make the UIView show up above the status bar (so that I can darken in, like a UIAlertView does)? Is this possible?
I don't think Apple makes this available to a non-UIAlertView
subclass of UIView
.
UIAlertView
is a subclass of UIView
. Have you tried subclassing UIAlertView
and overriding -drawRect:
with your own drawing code?
If the default behavior of UIAlertView works for you, I'd suggest changing the default look of the dialog. You can for example use the example code from this discussion and provide your own image.
What about working around the issue by hiding the status bar when the alert is displayed? That would make it more "alerty" anyway...
For the opacity issue: have you considered embedding button graphics into the background image, and making the button controls themselves transparent, changing the background image every time a button is pushed down or released?
精彩评论