2014-10-30 84 views
3

故事:辭退UIActionSheet編程在iOS的8個螺絲釘起來的UIApplication的Windows/keyWindow

我需要以編程方式解僱時,應用程序切換到後臺一個UIActionSheet,和我沒在的iOS 7,是遍歷[UIApplication sharedApplication].windows和找到類型爲UIActionSheet的視圖,然後解僱它。它並不在IOS工作8.

背景:

在iOS 8的,UIAlertController應被用於呈現警報或動作片,以及位實驗表明UIActionSheet使用UIAlertController內部實現:

po [[UIApplication sharedApplication] keyWindow] <_UIAlertControllerShimPresenterWindow:

po [[[UIApplication sharedApplication] keyWindow] rootViewController] <_UIAlertShimPresentingViewController: 0x7faa0cf049f0>

po [[[[UIApplication sharedApplication] keyWindow] rootViewController] presentedViewController] <UIAlertController: 0x7faa0c8cb9e0>

其中有正確的標題,消息等

困惑:

我加入一些代碼以關閉控制器,它並關閉它。然而,該應用程序現在不響應任何用戶交互,並且我發現在解散之後,keyWindow仍然是_UIAlertControllerShimPresenterWindow,那麼我很困惑,不應該放棄提供的控制器清理它的窗口?或者,是不是因爲它在應用程序轉到後臺時被解僱,所以窗口層次結構不在正常狀態,因此事情就搞砸了?

任何人都可以提供一些意見嗎?

謝謝!

+0

爲什麼不在UIAlertController上使用dismissViewController? – sha 2014-10-30 01:51:25

+0

謝謝@sha我試過了,但沒有奏效。 – hzxu 2014-10-30 03:26:03

+0

如果那不起作用,還有其他奇怪的事情正在發生。 – 2015-01-12 15:33:24

回答

1

起初我被困在這。從視圖控制器我辭退我叫這個asssuming它會解決這個問題的actionSheet後提出:

[self.view.window makeKeyAndVisible]; 

完全沒有工作。 shimPresenterWindow仍然是主窗口。

所以我想出了一個不同的想法。只要您關閉alertController插入下面的代碼:

NSString *windowDescription = NSStringFromClass([window class]); 
     if ([windowDescription isEqualToString:@"_UIAlertControllerShimPresenterWindow"]){ 
      window.hidden = YES; 
     } 

與使主窗口中的可見一個成功獲取的動作片關閉主視景。請注意,我不確定是否會導致任何類型的內存泄漏。