当我的应用程序进入后台时,我的模态显示视图控制器会解除像这样的警报视图...
// 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用户界面转换指南声明如下:
当出现警报或操作表时,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设置为“normal”而不成功:
if (self.alertView) {
[self.alertView dismissWithClickedButtonIndex:0 animated:NO];
self.alertView = nil;
self.view.tintAdjustmentMode = UIViewTintAdjustmentModeNormal;
}
顺便说一句,如果应用程序在后台终止,应用程序将重新启动具有正确色调的条形按钮项目(即,未调暗)。
答案 0 :(得分:9)
我很确定这是苹果公司的一个错误。我在https://bugreport.apple.com提交了一份错误报告,请提交一份重复的错误报告,让Apple注意它,that is how Apple assigns priority to bugs。
答案 1 :(得分:7)
我在我的应用中遇到了同样的错误,并成功找到了解决方法。您需要做的就是在后台关闭UIAlertView后,在应用程序的主窗口上将tintAdjustmentMode设置为UIViewTintAdjustmentModeNormal。容易:)
答案 2 :(得分:5)
虽然我可以以编程方式关闭警报视图以响应UIApplicationDidEnterBackgroundNotification
,但iOS 7中的自动色调调暗将不会更新。
但是,如果我取消警报视图以响应UIApplicationWillResignActiveNotification
,则自动色调调暗行为会响应。
// called when view controller receives a UIApplicationWillResignActiveNotification
- (void)applicationWillResignActiveNotification:(NSNotification *)notification
{
if (self.alertView) {
[self.alertView dismissWithClickedButtonIndex:0 animated:NO];
self.alertView = nil;
}
}