【发布时间】:2015-03-22 14:20:25
【问题描述】:
我已经为 iOS 开发了很长一段时间,但是我总是遇到自定义警报/弹出窗口的问题,我只是不知道添加自定义视图的正确方法是什么作为应用中所有其他视图之上的弹出窗口。
我在网上查过,有几种方法可以做到这一点,但创建这些自定义警报/弹出窗口的最佳方法是什么?
有一个 CustomViewController 类,这就是我创建它并将其添加为弹出窗口的方式:
新建一个
UIViewController在
UIViewController的XIB文件中添加一个UIView作为self.view的子文件(这将包含弹出元素)-
在
UIViewController中添加这个方法来展示视图:- (void)presentViewController { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; self.window.windowLevel = UIWindowLevelStatusBar; self.window.screen = [UIScreen mainScreen]; [self.window makeKeyAndVisible]; UIWindow *mainWindow = [[[UIApplication sharedApplication] delegate] window]; [mainWindow setUserInteractionEnabled:NO]; [self.window addSubview:self.view]; self.view.alpha = 0.0f; self.backgroundImage.image = [self takeSnapshot]; [UIView animateWithDuration:0.2 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ self.view.transform = CGAffineTransformIdentity; self.view.alpha = 1.0f; } completion:nil]; } -
在
UIViewController中添加这个方法来移除视图:- (void)dismissShareViewController { [UIView animateWithDuration:DEFAULT_ANIMATION_DURATION animations:^{ self.view.alpha = 0.0f; } completion:^(BOOL finished) { [self.view removeFromSuperview]; self.window = nil; [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationSlide]; UIWindow *mainWindow = [[[UIApplication sharedApplication] delegate] window]; [mainWindow setUserInteractionEnabled:YES]; }]; }
用法:
-
为
UIViewController创建属性@property (strong, nonatomic) CustomViewController *viewController; -
初始化并呈现
- (void)showCustomViewController { self.viewController = [[CustomViewController alloc] init]; [self.viewController presentViewController]; }
问题是我总是收到Received Memory Warning。此外,我在CustomViewController 中添加了一个- (void)dealloc 方法,以了解UIViewController 是否正确释放,但由于某种原因,dealloc 方法在presentViewController 之后被调用,而不是在@987654341 之后被调用@ 应该的。
我想要实现的另一件事:这个CustomViewController 没有UIStatusBar,当我尝试呈现MFMailComposeViewController 时,我总是让MFMailComposeViewController 显示没有UIStatusBar 或白色状态栏,但我无法再次将其更改为默认值。我在StackOverflow 上尝试了几个问题,但没有任何运气,它不会改变。
Putting a UIView or UIWindow above Statusbar
请永远,有人会帮助我。
【问题讨论】:
-
为什么不使用 UIAlertView?
-
因为我不想使用
UIAlertView,所以我想要一些东西来覆盖整个屏幕,但是带有alpha。
标签: ios objective-c uiview uiviewcontroller