开发者

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 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?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜