【发布时间】:2013-10-09 23:15:57
【问题描述】:
当我的应用进入后台时,我的模态显示视图控制器会像这样关闭警报视图...
// called when view controller receives a UIApplicationDidEnterBackgroundNotification
- (void)applicationDidEnterBackground:(NSNotification *)notification
{
if (self.alertView) {
[self.alertView dismissWithClickedButtonIndex:0 animated:NO];
self.alertView = nil;
}
}
当我的应用程序在没有被终止的情况下返回到前台时,警报视图就消失了。但是,导航栏中的栏按钮项(来自 UINavigationController)仍然变暗,就好像警报视图仍然显示一样。
此外,关闭模态视图控制器(通过点击变暗的条形按钮项)显示当前视图控制器的条形按钮项也变暗。条形按钮项可以使用,但它们仍然是灰色的。
那么我如何取消调暗条形按钮项?或者,如何在 iOS 7 中以编程方式正确关闭警报视图以响应应用程序进入后台?
iOS 7 UI 转换指南声明如下:
当出现警报或操作表时,iOS 7 会自动调暗其后面视图的色调。为了响应这种颜色变化,在其渲染中使用 tintColor 的自定义视图子类应覆盖 tintColorDidChange 以在适当时刷新渲染。
我的导航栏和栏按钮项不是自定义视图;我没有对它们进行子类化。我在情节提要中使用它们的默认属性创建了导航栏(与栏按钮项相同)。所以我没有地方覆盖 tintColorDidChange。
我的所有视图都使用其 tintColor 属性的默认值。
我尝试将色调颜色重新设置为默认值,但没有成功:
if (self.alertView) {
[self.alertView dismissWithClickedButtonIndex:0 animated:NO];
self.view.tintColor = nil;
self.view.window.tintColor = nil;
self.alertView = nil;
}
我也尝试在视图控制器的 viewDidAppear: 中重新设置色调颜色,但没有成功。
我还尝试将主视图的 tintAdjustmentMode 设置为“正常”但没有成功:
if (self.alertView) {
[self.alertView dismissWithClickedButtonIndex:0 animated:NO];
self.alertView = nil;
self.view.tintAdjustmentMode = UIViewTintAdjustmentModeNormal;
}
顺便说一句,如果应用程序在后台被终止,应用程序会重新启动,并且条形按钮项目具有正确的色调(即未变暗)。
【问题讨论】:
-
我的警报视图已经从后台过渡到了,这让我很沮丧。我也会多看看这个。
-
使用
[[UIApplication sharedApplication] keyWindow],检查当前活动窗口是什么。由于 UIAlertView 有自己的窗口,因此该窗口可能没有正确关闭,从而使您的栏(按钮项)变暗。您也可以尝试在应用再次激活之前将其关闭 (application:willEnterForeground:)。
标签: iphone ios ios7 uialertview