2013-12-18 1 views
0

iPad 메일 앱에 계정 설정이 없으면 메일 클라이언트를 열어 선택할 수 있습니까? 메일 클라이언트를 선택하면보기 컨트롤러가 모달 해제되고 UISplitViewController이 표시됩니다.어떻게 ViewController를 표시 한 다음 UISplitViewController를 표시하도록 닫습니까?

iPad 응용 프로그램에서 작업하고 싶습니다. 여기서는 ViewController을 먼저 표시하고 UISpiltViewController을 표시하지 않습니다. 나는 그것이 어떻게 이루어 졌는지 궁금합니다.

처음에는 루트 뷰 컨트롤러로 설정하여 UISplitViewController 점심 식사 만 할 수있었습니다. 여기에 내 코드

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    // Override point for customization after application launch. 



    PopViewController * menuVC = [[PopViewController alloc] initWithStyle:UITableViewStyleGrouped]; 
    UINavigationController * navMenue = [[UINavigationController alloc] initWithRootViewController:menuVC]; 

    DetialViewController *delainVC =[[DetialViewController alloc] init]; 
    UINavigationController * navdetail = [[UINavigationController alloc] initWithRootViewController:delainVC]; 

    UISplitViewController *splitVC = [[UISplitViewController alloc] init]; 
    splitVC.viewControllers = [NSArray arrayWithObjects:navMenue,navdetail, nil]; 


    self.window.rootViewController = splitVC; 
    self.window.backgroundColor = [UIColor whiteColor]; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

난 당신이 항상 rootViewController로 UISplitViewController을 설정해야 배울 수 있습니다. 하지만 내 목표는 UISplitViewController 전에 ViewController를 여는 것입니다. 계정 설정이없는 경우 정확히 iPad 메일 앱과 같습니다.

+1

에 기록하는지 여부를 체크 할 수있는 기능을 썼다. 루트 뷰 컨트롤러를 설정 한 후에는 모달 뷰 컨트롤러를 맨 위에 놓을 지 여부를 결정하십시오. –

+0

모달 뷰 컨트롤러를 열었습니다. 모달 뷰를 열기 전에 SplitViewController를 볼 수 있기 때문에 이상하게 보입니다. –

답변

2

는 이후 - 전 (보이드)의 viewDidLoad가 호출된다. 뷰에 애니메이션이없는 모달 뷰 컨트롤러를 열면 메서드가로드됩니다. 문제를 해결했다. 그리고 UISplitViewcontroller가 눈에 띄지 않았습니다. 아래는 코드입니다. 이 코드는 detailview 컨트롤러에 배치해야합니다.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self checkLogIn]; 

} 

은 사용자가 이미 당신이 바로 그것을 가지고 생각

-(void) checkLogIn{ 

    if(notLoggedIn){ 
     ViewController * VC = [[ViewController alloc] init]; 
     [self presentViewController:VC animated:NO completion:nil]; 
    } 

} 
+1

분할보기 컨트롤러에서 작동하는 것이 좋습니다. 그것은 보편적 인 해결책은 아니지만 - 당신이 탭 막대 컨트롤러 (또는 독립형 컨트롤러)의 첫 번째 탭 컨트롤러에서 이것을 시도하면 오류가 발생합니다 ( 시도 >보기가 창 계층에 없습니다!). 그것은 네비게이션 컨트롤러의 루트보기 컨트롤러에서 작동합니다. – rdelmar

+0

@rdelmar 방금 샘플 프로젝트를 만들었습니다. 위의 코드는 네비게이션 컨트롤러 인 루트보기 컨트롤러에서도 작동합니다. 위의 솔루션이 최고인지는 모르겠지만 예상대로 작동합니다. 다른 해결책이 있는지 알고 싶습니다. –

1

(애니메이션이없는) 상세보기 컨트롤러의 viewDidAppear 메서드에서 모달보기 컨트롤러를 표시하면 가장 먼저 보는 것입니다. 애니메이션 (BOOL) (공극) viewDidAppear - 예를 들어,

-(void)viewDidAppear:(BOOL)animated { 
    if (notLoggedIn) { 
     UIViewController *modal = [self.storyboard instantiateViewControllerWithIdentifier:@"Blue"]; 
     [self presentViewController:modal animated:NO completion:nil]; 
    } 
} 
+0

답변 해 주셔서 감사합니다. 모달 뷰 컨트롤러가로드되기 전에도 UISplivewController를 볼 수 있습니다. 나는 내가 잘못한 것을 발견했다. 애니메이션으로 모달 뷰 컨트롤러를 열었습니다. 나는 당신의 대답에 투표 할 것입니다. 그러나 미래의 참조를 위해 나는 잘 작동하는 대답을 게시 할 것입니다. –

+0

@RedDevil, 당신은 시뮬레이터 나 장치에서 "glance"를 보았습니까? 나도 그걸 보지 못한다. – rdelmar

+0

그래 내가 한 번 보았는데 .. - (void) viewDidLoad가 호출되기 전에 - (void) viewDidAppear : (BOOL) animated .. viewdidload에 코드를 두는 것은 내가 ipad 2를 사용하고 있기 때문에 –

관련 문제