Ed Marty
Ed Marty

Reputation: 39700

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:

  1. 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.

  2. 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 alpha 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.

Upvotes: 3

Views: 13537

Answers (6)

borisdiakur
borisdiakur

Reputation: 12132

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];

Upvotes: 5

jermin
jermin

Reputation: 31

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

Upvotes: 3

igul222
igul222

Reputation: 8637

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?

Upvotes: 0

What about working around the issue by hiding the status bar when the alert is displayed? That would make it more "alerty" anyway...

Upvotes: 0

Alex Reynolds
Alex Reynolds

Reputation: 96994

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?

Upvotes: 0

user81038
user81038

Reputation:

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.

Upvotes: 0

Related Questions