문제

"Show-> show alert1-> Something-> show alert2"를하기 위해 코드 한 장을 씁니다.


    //do something
    UIAlertView *alert = [[UIAlertView alloc] 
                          initWithTitle:@"Alert 1" 
                          message:nil 
                          delegate:nil 
                          cancelButtonTitle:@"OK" 
                          otherButtonTitles:nil];
    [alert show];
    [alert release];
    //do something  
    UIAlertView *alert2 = [[UIAlertView alloc] 
                           initWithTitle:@"Alert 2" 
                           message:nil 
                           delegate:nil 
                           cancelButtonTitle:@"OK" 
                           otherButtonTitles:nil];
    [alert2 show];
    [alert2 release];

그리고 갑자기 여러 경고에 이상한 일이 일어났습니다. "Alert 1"-> "Alert 2"( 'OK')-> "Alert 1"을 보여줍니다. 왜 "Alert 1"이 다시 표시됩니까? 나는 아직 대표 방법을 작성하지 않았습니다. 어쩌면 버그일까요?

나는 -(void) alertview : (uialertview *) AlertView clickedbuttonatindex : (nsinteger) buttonIndex가 잘 작동합니다. 대표 방법이 여러 경보를 보여주는 일반적인 방법입니까?

도움이 되었습니까?

해결책

쇼는 모달이 아니기 때문에 경고 1이 표시되고 Alert 2로 덮여 있다고 생각합니다. 경고 2가 닫히면 경고 1이 여전히 열려 있습니다.

두 번째 질문에 alertView:didDismissWithButtonIndex: 더 잘 작동 할 수 있지만 실제로는 테스트하지 않았습니다.

다른 팁

대의원은 경고가 기각 될 때 알림을받을 수 있으며 어떤 버튼을 사용하여 해산하는 데 사용되었습니다. 경고가 전혀 해제되는지 여부는 영향을 미치지 않습니다.

버튼을 누르면 (필요하지 않은 경우) 버튼을 누르면 경고가 기각 될 때까지 눈에 보이는 상태로 유지됩니다. [UIAlertView dismissWithClickedButtonIndex:animated] 또는 (문서화되지 않은) dismiss 경고 인스턴스의 메소드.

Cobbal이 제안한 것처럼 Alert 2가 경고 1에 팝업되고 Alert 2를 무시하고 경고 1이 남아 있습니다 (자체가 해고 될 때까지).

다른 사람이 여전히 보여지는 동안 새로운 경고를 보여주고 싶은 특별한 이유가 있습니까? 아마도 더 많은 맥락이 우리가 문제의 근본을 얻는 데 도움이 될 것입니다.이 문제는 설계 문제라고 생각합니다.

편집] 이것으로 돌아와서 다시 읽으려면, 대의원 방법에 대해 무엇을 요구하는지 궁금합니다. 어떤 경우에는 아마도 직접적이든 간접적으로 원하는 것일 것입니다. 간접적으로 나는 경고 2가 표시되어야하는지 (또는이를 초래하는 상황)를 결정하는 다른 곳에서 어떤 상태를 설정할 수 있음을 의미합니다. 첫 번째 경고를 표시 할 때 해당 상태 (아마도 깃발)를 설정할 수 있으며 경고가 기각되면 (대의원 방법에서) 지우 셨습니다.

이것이 일어나는 이유는 UialertView가 표시되는 동안 차단되지 않기 때문입니다. 경고가 표시된 후 alertview를 표시 한 후 작성된 모든 코드는 직접 실행됩니다.

당신이 가져야 할 것은 두 가지 다른 방법입니다. 하나는 무언가를하고 경고를 보여주고 다른 하나는 무언가를하고 다른 경고를 보여주는 것입니다.

첫 번째 방법을 시작하여 무언가를하고 경고를 표시 한 다음 Alert의 대의원 메소드에 연결하고 AlertView에서 콜백을 받으면 다른 방법을 실행하십시오.

이런 식으로 프로세스의 두 번째 부분은 프로세스의 첫 번째 부분에서 사용자가 경고를 누르기 전까지는 발생하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top