상황 : 내 앱에 뷰 컨트롤러가 많으며 탐색 또는 모달 뷰 컨트롤러로 제공됩니다. 앱은 거의 모든 화면에서 서버와 통신합니다. 사용자의 자격 증명이 만료되었을 때 사용자에게 로그인 화면을 표시하려고합니다. 로그인 화면을 현재 화면 상단에 모달로 표시하고 로그인이 완료되면 즉시 닫으려고합니다. 나는 이것이 어떻게 성취 될 수 있는지 전혀 모른다. 일부보기 컨트롤러 및 로그인 화면에 의해 화면에 모달보기가 표시되는 경우이를 모달로 표시해야합니다. 나는 appDelegate에서 윈도우의 rootViewController 스위칭을 시도했지만 잘 작동하지 않았고 또한 많은 것을 엉망으로 만들었다. 제게 제안 해주세요.상단에보기 컨트롤러를 팝업하는 방법은 무엇입니까?
-1
A
답변
1
귀하의 문제를 참조하십시오. 내 생각에 가장 좋은 방법은 간단한 클래스가 있다고 말하면서 앱을 평생 동안 두지 말고 LoginHandler.h
라고 말하면됩니다.
앱을 시작할 때 초기화하지 않아도됩니다. 당신이 그것을 필요로 할 때 당신은 항상이 클래스의 동일한 인스턴스를 얻을 수있는 편리한 트릭을 구현할 수 있습니다
// @interface
+(id)sharedHandler;
//@implementation
+(id)sharedHandler {
static id sharedHandler = nil;
if (sharedHandler == nil) {
[sharedHandler = [[LoginHandler alloc] init];
}
return sharedHandler;
}
지금 당신은 단순히 사용자 NSUserDefaults
또는 UIApplication
유사 [LoginHandler sharedHandler]
과 공유 인스턴스를 얻을.
-(BOOL)renewLoginFromViewController:(UIViewController*)controller`;
같은 방법을 가질 수
:
[controller presentModalViewController:loginScreen];
및 로그인이 성공하면 (또는 전에 사라지지 YES
을 반환합니다 로그인이 완료되었습니다.)
이 클래스의 모든 로그인 논리를 처리 할 수 있습니다. encapsulation에 대한 훌륭한 교과서 예제가 될 것입니다.
2
UIViewController
의 presentViewController:animated:completion:
방법을 확인하여 모달보기를 표시하십시오 (iOS < 5.0 용 건물이 아닌 경우).
0
앱이 시작될 때만 확인하는 것이 좋습니다. 이렇게하면 didFinishLaunchWithOptions의 AppDelegate.m에서이 작업을 수행하는 것이 좋습니다.
당신은 그런 식으로 뭔가를 할 수 있습니다
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
if (USER_HAS_VALID_CREDENTIALS) {
self.viewController = [[[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil] autorelease];
} else {
self.viewController = [[[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil] autorelease]; // need to get credentials
}
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
는 성공적으로 로그인 한 후 LoginViewController에서 RootViewController를 시작해야합니다.
관련 문제
- 1. 자동으로 키보드를 팝업하는 방법은 무엇입니까?
- 2. googlemap android의 상단에보기 추가
- 3. '편집'페이지를로드하는 대신 '편집'창을 팝업하는 방법은 무엇입니까?
- 4. 버튼 클릭시 페이지를 팝업하는 방법은 무엇입니까?
- 5. 이전 viewController에 자동으로 팝업하는 방법은 무엇입니까?
- 6. 다른 UIView에서 경고처럼 UIView를 팝업하는 방법은 무엇입니까?
- 7. 광고 이미지를 팝업하는 클래스를 생성합니다.
- 8. 현재보기 컨트롤러를 변경하는 방법은 무엇입니까?
- 9. Codeigniter에서 컨트롤러를 구조화하는 방법은 무엇입니까?
- 10. iPad에서보기 컨트롤러를 전환하는 방법은 무엇입니까?
- 11. CodeIgniter로 컨트롤러를 테스트하는 방법은 무엇입니까?
- 12. CodeIgniter에서 컨트롤러를 수동으로로드하는 방법은 무엇입니까?
- 13. 다른 컨트롤러를 입력으로 받아들이는 일반 (컨테이너) 컨트롤러를 만드는 방법은 무엇입니까?
- 14. C# Windows 응용 프로그램에서 webform을 팝업하는 방법은 무엇입니까?
- 15. "Cellular data is Turned"경고 메시지를 팝업하는 방법은 무엇입니까?
- 16. 이미지를 두드렸을 때 데이터를 입력하기 위해 UITextField를 팝업하는 방법은 무엇입니까?
- 17. QDialog와 반대로 QWidget을 확장하는 다른 창을 팝업하는 방법은 무엇입니까?
- 18. DataGrid에 링크가 있고 Flex에서 링크를 클릭하면 창을 팝업하는 방법은 무엇입니까?
- 19. ASP.NET 데이터 격자 내에서 달력을 팝업하는 방법은 무엇입니까?
- 20. 바로 가기를 사용하여 메뉴 막대를 팝업하는 방법은 무엇입니까?
- 21. PHP를 실행하기 전에 JavaScript 확인 창을 팝업하는 방법은 무엇입니까?
- 22. 대화 형 Python 콘솔을 팝업하는 가장 쉬운 방법은 무엇입니까?
- 23. YouTube 비디오를 재생하기 위해 jquery 창을 팝업하는 방법은 무엇입니까?
- 24. 리 폴보기에서 대기 메시지 창을 팝업하는 방법은 무엇입니까?
- 25. vimeo/youtube 비디오를 재생하기 위해 jquery 창을 팝업하는 방법은 무엇입니까?
- 26. WPF 응용 프로그램에서 전체 화면으로 usercontrol을 팝업하는 방법은 무엇입니까?
- 27. JBoss AS 포틀릿에서 새 창을 팝업하는 방법은 무엇입니까?
- 28. C의 winMain에서 콘솔을 프로그래밍 방식으로 팝업하는 방법은 무엇입니까?
- 29. iframe의 비디오 또는 jpeg 또는 swf를 팝업하는 방법은 무엇입니까?
- 30. Django 프로젝트에서 브라우저의 다운로드 대화 상자를 팝업하는 방법은 무엇입니까?
감사합니다. Mundi. 그것은 효과가 있었다. – user1409592
그런 다음 체크 표시를 확인하십시오 ;-). – Mundi
호기심에서 벗어나 문제가되는 것과 관련이없는이 클래스는 특정 클래스의 공유 객체를 갖는 표준 방법입니까? – esqew