2010-04-19 3 views
27

사용자를 인증하는 동안 모든 입력을 차단하고 UIActivityIndicatorView를 보여주는 뷰 (UIControl)를 만들고 싶습니다.StatusView를 포함한 다른 모든 뷰보다 UIView 추가

UIActionSheet 및 UIAlertView는 입력을 차단하기 위해 다른 모든보기의 상단에 검정색 반투명보기를 추가하여 관리하고 있습니다.

위의 UIWindow에 [[UIApplication sharedApplication] windows] 배열의 뷰를 추가하려고 시도했지만 표시되어있는 경우 UIKeyboard 위에 배치하는 반면 StatusBar에는 배치하지 않습니다. 말이된다).

내 다음 시도는 UIAlertView를 확장하고 모든 하위 뷰를 제거하고 해당 layer.contents = nil을 설정 한 다음 ActivityIndicator를 하위보기로 추가하는 것이 었습니다. 이 잘 작동하지만 UIAlertView "표시"호출 할 때 기본 탄력이 전환을 죽이는 것 수 없습니다.

누구나 나를 완전히 통제 할 수있는이 문제를 해결하는 가장 좋은 방법에 대한 지침이 있습니까?

오, 나는 차단 입력이 좋지는 않지만 짧은 시간 동안인지 확인하고 진행을 위해 완료해야하는 사용자의 작업이 처리 중임을 사용자에게 분명히 알리는 이점이 있습니다 . 내가 곧 같은 일을하려고 해요 및

+2

왜 상태 표시 줄을 "덮어 씌우십시오"? 그것을 숨기거나, 반투명하게 만들거나, 완전히 무시할 수 밖에없는 이유는 무엇입니까? 올바르게 회상하면 상태 표시 줄이 터치에 응답하지 않습니다. –

+5

오버레이보기 아래에있는 것처럼 보이길 원합니다. 이렇게하면 현재 상호 작용할 수 없다는 것을 사용자에게 분명하게 알릴 수 있습니다. 그것을 반투명하게 만드는 것은 불행히도이를 달성하지 못하며, 인증 기간 동안 만 숨기면 이상하게 보일 것입니다. 그리고 그것은 실제로 감동에 반응합니다. 기본값은 활성화 된 UIScrollView를 맨 위로 스크롤하는 것입니다. –

답변

51

찾고있는 모든 것을 갖추고처럼 다음

http://www.dejal.com/developer/dsactivityview

가 보이는 발견 API와 내가 그것을 해결했다고 믿는다.

전체 화면으로보기를 표시하려면 사용자 고유의 UIWindow를 만들고 해당 windowLevel 속성을 UIWindowLevelStatusBar로 설정해야합니다. 그런 다음 사용자 정의 하위 뷰를이 창에 추가 할 수 있습니다.

Apple은 권장하지 않지만 여러 창을 만들 수는 없습니다.

UIWindow *statusWindow = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
statusWindow.windowLevel = UIWindowLevelStatusBar; 
statusWindow.hidden = NO; 
statusWindow.backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.7]; 
[statusWindow makeKeyAndVisible]; 

당신은 당신이 메모리에서 분리 것처럼 보이는 화면에서 창을 제거 할.

[statusWindow release]; 

이 완전히 안심하지 않습니다,하지만 난 오류를하지 않으며 UIApplication의 창 배열에서 드롭 것으로 보인다. 이것이 틀린 지 알려주세요.

업데이트 : 나는 우연히 내가 표시이 오버레이 창을 제거 한 후 UIStatusBar가 정상에 활성있는 UIScrollView 스크롤 터치 이벤트를 복용하지 않았다

또 다른 문제. 해결책은 오버레이가 해제 된 후 기본 창을 다시 키 창으로 설정하는 것이 었습니다.

[primaryWindow makeKeyWindow]; 
+2

iOS 4.2에서이 코드가 작동하지 않습니다. 상태 창이 표시되지만 OS가 제공하는 기본 상태 표시 줄에는 표시되지 않습니다. 어떤 팁? iOS 4.2 이상으로 계속 사용할 수 있습니까? – jbrennan

+0

작동하지만 viewController를 애니메이션으로 표현하면 활동 표시기가있는이 창에 제시된 viewController 뒤에이 문제에 대한 해결책이 생깁니 까? –

+1

인터페이스를 가로 방향으로 회전하려고 할 때이 작업이 실패했습니다. statusWindow는 원점 상태 막대 위치에만 고정됩니다. –

1

은 좀 더 주위를 파고했던 당신이

+0

링크를 제공해 주셔서 감사합니다. 그러나이 링크는 내가 볼 수있는 상태 표시 줄을 포함하지 않습니다. UI의 전체 영역을 커버하는 반투명 뷰를 수행합니다. –

5

메인 윈도우 내의 다른 모든보기 상단에보기를 표시해야했습니다. 처음에는 키 윈도우 상단에 다른 윈도우를 표시 할 생각이었습니다. 사과는 여러 개의 창을 사용하지 않으므로 반대하기로 결정했습니다.

다음 코드는 나를 위해 속임수를 썼는지 :

내가 자동으로 모든 다른 뷰의 상단에 내보기를 제공 내 키 윈도우에 하위보기로 내 시야를 추가했다. 내 경우에는이 코드는 응용 프로그램의 위임

[self.window addSubview:topViewController.view] 

을에 그리고 내가보기에 완료하고 때, 다음 코드는 윈도우에서 제거합니다.

[topViewController.view removeFromSuperview]; 
+2

이것은 상태 표시 줄을 포함하지 않습니다 – OpenThread

+0

어쨌든 가로 방향 응용 프로그램에서 이것은 세로로보기를 추가하고 이것은 매우 어리석은 것처럼 보입니다. – Dvole

관련 문제