13

当我的应用程序进入后台时,我的模态显示视图控制器会像这样关闭警报视图......

// 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;
}

顺便说一句,如果应用程序在后台被终止,应用程序将重新启动,并且条形按钮项目具有正确的色调(即未变暗)。

4

3 回答 3

9

我很确定这是Apple的一个错误。我已经在https://bugreport.apple.com提交了一份错误报告,请提交一份重复的错误报告以让 Apple 关注它,因为这是 Apple 为错误分配优先级的方式

于 2013-11-06T22:50:19.710 回答
7

我在我的应用程序中遇到了同样的错误,并成功找到了解决方法。在后台关闭 UIAlertView 后,您需要做的就是在应用程序的主窗口上将 tintAdjustmentMode 设置为 UIViewTintAdjustmentModeNormal。简单的 :)

于 2013-12-07T00:56:10.340 回答
5

尽管我可以以编程方式关闭警报视图以响应UIApplicationDidEnterBackgroundNotification,但 iOS 7 中的自动色调调光不会得到更新。

但是,如果我关闭警报视图以响应 a ,则自动色调变暗行为将响应UIApplicationWillResignActiveNotification

// called when view controller receives a UIApplicationWillResignActiveNotification
- (void)applicationWillResignActiveNotification:(NSNotification *)notification
{
    if (self.alertView) {
        [self.alertView dismissWithClickedButtonIndex:0 animated:NO];
        self.alertView = nil;
    }
}
于 2013-10-10T00:43:14.280 回答