12

ここで回答したプロジェクトでコードスニペットを使用していました: UIAlertView without having reference to it

コードは次のとおりです。

+ (UIAlertView *) getUIAlertViewIfShown {
    if ([[[UIApplication sharedApplication] windows] count] == 1) {
        return nil;
    }

    UIWindow *window = [[[UIApplication sharedApplication] windows] objectAtIndex:1];
    if ([window.subviews count] > 0) {
        UIView *view = [window.subviews objectAtIndex:0];
        if ([view isKindOfClass:[UIAlertView class]]) {
            return (UIAlertView *) view;
        }
    }
    return nil;
}

残念ながら、iOS 7 では機能せず、アラート ビューを閉じることができません。デバッグ中に、ループでビューがクラスであることを示していることがわかりましたUITransitionView。このビュー クラスに関する簡単なドキュメントが見つからなかったため、かなり混乱しています。

どうすればこの問題を解決できますか?

4

5 に答える 5

16

iOS7では、UIAlertViewウィンドウが表示されません-[UIApplication windows]。実際、UIAlertView自体はどのウィンドウにも追加されず、-[UIAlertView window]常にnil. 代わりに、アラート ビューは、アラート ビュー-[UIApplication keyWindow]への参照なしで配置された、文書化されていないさまざまなビューを管理します。

iOS7 での唯一の現実的なオプションは、アラート ビューを実際に追跡することです。

于 2013-09-09T17:16:13.217 に答える
15

iOS 7 ソリューション

Class UIAlertManager = objc_getClass("_UIAlertManager");
UIAlertView *topMostAlert = [UIAlertManager performSelector:@selector(topMostAlert)];

AppStore で承認できるかどうかはわかりませんが、動作します

UPD 1 行コード:

UIAlertView *topMostAlert = [NSClassFromString(@"_UIAlertManager") performSelector:@selector(topMostAlert)];
于 2013-10-09T14:46:28.313 に答える
0

に登録できますUIWindowDidBecomeVisibleNotification:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(aWindowBecameVisible:)
                                             name:UIWindowDidBecomeVisibleNotification
                                           object:nil];

aWindowBecameVisible で、次のウィンドウの説明を確認します_UIModalItemHostingWin

if ([[theWindow description] hasPrefix:@"<_UIModalItemHostingWin"])
{
    // This is the alert window
}
于 2014-05-31T20:24:55.537 に答える