[英]iPhone: detecting if a UIAlert/UIActionSheet are open
在我的iOS應用程序中,我有一個計時器啟動,當它啟動時,我需要能夠檢測是否有一個Alert(UIAlertView)或一個Action Sheet(UIActionSheet)打開。
一種方法是修改顯示警報/操作表的代碼 - 但不幸的是,這不是我的選擇。
所以,問題是 - 有沒有辦法知道/檢測警報或行動表是否已被打開?
是否有任何通知在打開時發送,或者任何遍歷視圖層次結構以檢測它?
謝謝
他們確實在打開時發送警報,但僅發送給他們的delegate
- 檢查此問題以獲得解決該問題的好方法。 Techzen建議您在打開警報時將布爾標志設置為YES
,並在關閉警報時將其設置為NO
。
編輯:
由於您根本無法訪問代碼,為什么不嘗試這段笨重的代碼:
-(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;
}
- (BOOL) doesAlertViewExist {
for (UIWindow* window in [UIApplication sharedApplication].windows) {
for (UIView* view in window.subviews) {
BOOL alert = [view isKindOfClass:[UIAlertView class]];
BOOL action = [view isKindOfClass:[UIActionSheet class]];
if (alert || action)
return YES;
}
}
return NO;
}
檢測警報似乎相對容易,但行動表讓我難過。 在iOS 6.1中,我必須更進一步
BOOL IsActionOpen(UIView* aView) {
BOOL actionOpen = NO;
if (aView) {
if ([aView isKindOfClass:[UIActionSheet class]]) {
actionOpen = YES;
}
else if (aView.subviews.count > 0) {
for (UIView* aSubview in aView.subviews) {
if ( IsActionOpen( aSubview)) {
actionOpen = YES;
break;
}
}
}
}
return actionOpen;
}
- (BOOL) isAnActionSheetOpen {
BOOL actionOpen = NO;
for (UIWindow* w in [UIApplication sharedApplication].windows) {
actionOpen = IsActionOpen(w);
if (actionOpen)
break;
}
return actionOpen;
}
您還可以檢查視圖的窗口屬性:
if(actionSheet.window)
isBeingPresented = YES;
thanx的幫助,但自從iOS 6,代碼片不再工作。 但是,我修復了此代碼的問題。 希望這可以幫助
for (UIWindow* window in [UIApplication sharedApplication].windows) {
NSArray* subviews = window.subviews;
if ([subviews count] > 1) {
BOOL alert = [[subviews objectAtIndex:1] isKindOfClass:[UIAlertView class]];
BOOL action = [[subviews objectAtIndex:1] isKindOfClass:[UIActionSheet class]];
if (alert || action)
return YES;
}
}
return NO;
-(BOOL)GetKeyWindow {
UIViewController *presentedViewController = myAppDelegate.window.rootViewController.presentedViewController;
if (presentedViewController) {
if ([presentedViewController isKindOfClass:[UIActivityViewController class]] || [presentedViewController isKindOfClass:[UIAlertController class]]) {
return YES;
}else{
return NO;
NSLog(@"not present");
}
}
else{
return NO;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.