2013-10-09 37 views
13

當我的應用程序進入的背景下,我提出了模態視圖控制器解聘警報視圖是這樣的...如何在iOS 7中以編程方式正確解除UIAlertView?

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

順便說一句,如果應用程序被終止,而在後臺,應用程序與具有欄按鈕的項目將重新啓動正確的色調(即,不變暗)。

+0

我的警報視圖已經通過從背景過渡到很多我的沮喪。我也會看更多。 – HalR

+0

使用'[[UIApplication sharedApplication] keyWindow]',檢查當前活動窗口是什麼。由於UIAlertView具有自己的窗口,因此可能是該窗口不能正確解除,使您的欄(按鈕項)變暗。您也可以在應用程序再次激活之前嘗試解除它('application:willEnterForeground:')。 –

回答

9

我很肯定這是蘋果公司的一個漏洞。我已經在https://bugreport.apple.com上提交了一個錯誤報告,請提交一份重複的錯誤報告以讓Apple注意它,如that is how Apple assigns priority to bugs

+0

這似乎更準確。如果操作系統在背景上解除了模態,那麼它應該完全執行。與此同時,你可以使用標準的'dismissWithClickedButtonIndex:animated:'在你的應用程序發送到後臺之前關閉它 – Brenden

+0

在這件事情上的任何進展? – Xeieshan

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; 
    } 
} 
+0

你仍然應該像下面的@Mohamed那樣提交一個bug。 – Brenden

+0

請記住,打開控制中心和通知中心會導致應用程序退出活動狀態,並導致警報被解除。這不是最佳的行爲。考慮使用sgosha的解決方案。 –

+1

@LeoNatan請解釋。在iOS 7上,當屏幕上出現警報時,我無法從邊緣輕掃以顯示控制中心或通知中心。 – bilobatum

7

我在我的應用程序中遇到了同樣的錯誤,併成功找到了解決方法。所有你需要做的就是在UIAlertView在後臺解散之後,在應用程序的主窗口上將tintAdjustmentMode設置爲UIViewTintAdjustmentModeNormal。簡單:)

+0

你是說'self.view.tintAdjustmentMode = UIViewTintAdjustmentModeNormal;'對嗎?我試過了,它不適用於我,你是否在'applicationDidEnterBackground'(這就是我試過的)中做這件事,或者當你重新進入前景時你正在做它? –

+0

@MohamedHafez我把它稱爲下一行後 - [UIAlertView dismissWithClickedButtonIndex:animated:] – sgosha

相關問題