2013-06-24 2 views
0

특정 서버 알림을 위해 UIActionSheet를 표시해야합니다. 하지만 여기에 문제가 발생하면 동시에 UIAlertView가 모든보기 컨트롤러에 표시되면 UIActionSheet가 비활성화됩니다 (경고보기를 눌렀을 때보기 컨트롤러에서 아무 것도 선택할 수 없기 때문에보기가 비활성화되어 있기 때문에 문제가 발생합니다). UIActionSheet). 누구나 이런 종류의 문제에 직면했다. 어떤 문제를 해결할 수 있을까?UIAlertView를 통해 UIActionSheet 표시

작업 시트를 표시하기 전에 경고보기를 닫으려고했으나 많은 컨트롤러에서 많은 경고보기를 보았으므로 경고보기를 해제해야합니다. 모두 해당 컨트롤러에 대해 로컬입니다. 이 문제를 해결하는 방법.

참고 : UIActionSheet에 응답하기 전에 확인을 클릭 할 수 없기 때문에 동일한 문제가 iPod에 발생하지 않습니다.

답변

2

activeAlertView라는 전역 경고보기를 사용하십시오. 이제 경고보기를 표시하면 해당 경고보기를 확인한 후 표시하고 할당하십시오. 마찬가지로

은 .H의 속성을 선언하고 시도는 경고를 표시 할 때

@property (nonatomic, retain) UIAlertView *activeAlertView; 

다음 아래 코드를 사용하여 합성.

if(self.activeAlertView){ 
    [self.activeAlertView dismissWithClickedButtonIndex:0 animated:YES]; 
} 
UIAlertView *localAlert = [[UIAlertView alloc] initWithTitle:@"Title" message:@"Your message" delegate:nil cancelButtonTitle:@"cancel" otherButtonTitles:nil, nil ]; 
[localAlert show]; 
self.activeAlertView = localAlert; 
[localAlert release]; 

이 방법으로 activeAlertview는 현재 경고보기의 참조를 유지하고 actionSheet가 표시되기 전에 경고보기를 닫습니다.

+0

경고보기가 자식보기 컨트롤러 중 하나에 표시되는 경우 ... – Newbee

+0

자식보기 컨트롤러에서 비슷한 전역 경고보기를 만들고 경고가있는 경우 같은 경고를 사용하고, 새 경고를 표시하고 전역 변수의 참조. 중요하게는 하위보기 컨트롤러의 전역 속성에 액세스 할 수 있습니다. – Ashim

+0

그래, 내 마지막 옵션 이잖아 ... 나는이 사건을 처리 할 다른 가능성을 찾으려고 노력해왔다. – Newbee

0

메시지가 나타나면 먼저 을 확인하십시오. 경고가있는 경우.

다음에 작업 시트 표시 경고보기가 닫힙니다. didDismiss...에서 작업 시트를 표시해야하는 경우 BOOL 플래그를 확인할 수 있습니다.

이 경우
+0

예. 알아 두어야 할 경고보기는 무엇입니까? 부모보기 컨트롤러가 서버 이벤트를 수신하고 있으며 작업 시트도 표시하고 있지만 이전에는 모든 자식보기 컨트롤러 경고보기에 표시되었을 수 있습니다 .. 어떻게 어떤 경고보기 및 해제하는 방법을 알 수 있습니까 .. 내가 모든 아이에게 메시지를 보내야합니까? – Newbee

0

, 당신은

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex 

방법보다는를 사용한다

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 

그래서 코드는 줘야 :

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex 
{ 
if (buttonIndex == 0) 
{ 
    UIActionSheet *actionSheet = ... 
    [actionSheet showFromTabBar:self.tabBarController.tabBar]; 
} 
} 

감사

+0

들어오는 호출 알림 ... UIAlertview의 확인 버튼을 클릭 할 때까지 기다릴 수 없어 우선 순위를 부여하여 작업 시트를 표시해야합니다. – Newbee

1

식별 들어있는 alert-view태그 또는 alert-view을 설정해야합니다. 이 메소드를 호출 한 후에는 BOOL을 얻을

- (BOOL) doesAlertViewExist { 

     for (UIView* view in yuorviewcontroller.view.subviews) { 
      BOOL alert = [view isKindOfClass:[UIAlertView class]]; 

      if (alert) 
      { 
      return YES; 
      } 

     } 
     return NO; 

} 

- :

예 : - 다음

alertviewName.tag=1; 

확인할 수는 경고 뷰 같은 특정 view-controllersub-views 사용 울부 짖는 코드의 열기가 값이 YES 또는 NO 인 경우 UIAlertview의 대표를 사용하여 무시합니다. -

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex; 

코드를 넣고 didDismissWithButtonIndex 메서드에 코드를 삽입하십시오.

0

이 시도 : 대 (UIWindow *를 컴 [UIApplication sharedApplication] .windows) (* NSObject의 w.subviews OBJ)에 { 경우 ([isKindOfClass OBJ [UIAlertView 클래스])에 대한 { { [(UIAlertView *) obj dismissWithClickedButtonIndex : [(UIAlertView *) obj
cancelButtonIndex] 애니메이션 : 예]; } } }