当我的应用程序进入后台时,我的以模态方式呈现的视图控制器会像下面这样取消显示警告视图...
// 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方法,在适当的时候刷新渲染。
我的导航栏和栏按钮项不是自定义视图;我没有对它们进行子类化。我在storyboard中使用了它们的默认属性创建了导航栏(同样适用于栏按钮项)。因此,我没有地方可以重写tintColorDidChange。
我的所有视图都使用tintColor属性的默认值。
我尝试重新设置tintColor属性为默认值,但没有成功:
if (self.alertView) {
[self.alertView dismissWithClickedButtonIndex:0 animated:NO];
self.view.tintColor = nil;
self.view.window.tintColor = nil;
self.alertView = nil;
}
我也尝试在视图控制器的viewDidAppear:方法中重新设置色调颜色,但没有成功。
我还尝试将主视图的tintAdjustmentMode设置为“normal”,但也没有成功:
if (self.alertView) {
[self.alertView dismissWithClickedButtonIndex:0 animated:NO];
self.alertView = nil;
self.view.tintAdjustmentMode = UIViewTintAdjustmentModeNormal;
}
顺便提一下,如果应用程序在后台被终止,那么重新启动应用程序时,工具栏按钮项目的色调将正确(即未变暗)。
[[UIApplication sharedApplication] keyWindow]
,检查当前活动窗口是什么。由于UIAlertView有自己的窗口,可能会导致该窗口无法正确解除,从而使您的栏(按钮项)变暗。您还可以尝试在应用程序再次变为活动状态之前将其解除(application:willEnterForeground:
)。 - Scott Berrevoets