iOSアプリケーションのどの部分でも、現在表示されているUIAlertViewが確認できますか?私はこのコード現在表示されているUIAlertViewが確認できますか?
[NSClassFromString(@"_UIAlertManager") performSelector:@selector(topMostAlert)]
を見つけたが、それはプライベートAPIであると私のアプリは、Appleが拒否される可能性があります。 法的にこれを行う方法はありますか?
iOSアプリケーションのどの部分でも、現在表示されているUIAlertViewが確認できますか?私はこのコード現在表示されているUIAlertViewが確認できますか?
[NSClassFromString(@"_UIAlertManager") performSelector:@selector(topMostAlert)]
を見つけたが、それはプライベートAPIであると私のアプリは、Appleが拒否される可能性があります。 法的にこれを行う方法はありますか?
以下のiOS 7よりもデバイスの場合: -
あなたがUIAlertView
の体を作るときは、[alertView Show]
は、メインウィンドウのサブビューを追加します。したがって、UIAlertView
を検出するには、UIView
のサブビューを確認するだけです。UIAlertView
はUIView
から継承されます。
for (UIWindow* window in [UIApplication sharedApplication].windows){
for (UIView *subView in [window subviews]){
if ([subView isKindOfClass:[UIAlertView class]]) {
NSLog(@"AlertView is Present");
}else {
NSLog(@"AlertView Not Available");
}
}
}
EDIT: - iOSの7
Class UIAlertManager = objc_getClass("_UIAlertManager");
UIAlertView *Alert = [UIAlertManager performSelector:@selector(Alert)];
と
UIAlertView *Alert = [NSClassFromString(@"_UIAlertManager") performSelector:@selector(Alert)];
NOTE使用してデバイスの場合: -をあなたがサードパーティのAPIの、あなたの唯一の現実的な選択肢を使用できない場合iOS7はアラートビューを実際に追跡することです。
このように確認できます。
-(BOOL) doesAlertViewExist {
for (UIWindow* window in [UIApplication sharedApplication].windows) {
NSArray* subviews = window.subviews;
if ([subviews count] > 0) {
BOOL alert = [[subviews objectAtIndex:0] isKindOfClass:[UIAlertView class]];
BOOL action = [[subviews objectAtIndex:0] isKindOfClass:[UIActionSheet class]];
if (alert || action)
return YES;
}
}
return NO;
}
このソリューションは、iOS 7以降では動作しません。 iOS 7以降の方法はありますか? –
チェックこの質問:[リンク](http://stackoverflow.com/q/10727957/2298998) –
それはプライベートなAPIですが、どこかに私はperformselectorを使用すると、Appleの静的コード分析とOKであることを読みました。しかし、あなたは二重にする必要があります。 –