0

안녕하세요. 현재 분할보기 컨트롤러가있는 분당 애플리케이션이 있습니다. 내가하고 싶은 일은 나머지 앱이 나타나기 전에 로그인 화면을 추가하는 것입니다. 그렇지 않은 경우 네비게이션 컨트롤러의 화면 왼쪽에 로그인 화면이 나타날 수 있습니다. 내 응용 프로그램 위임에SplitView의 로그인 화면 Ipad

는 현재

// Override point for customization after application launch. 
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) { 

    //Grab storyBoard 
    UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPad" bundle:nil]; 

    //Grab a reference to the UISplitViewController 
    UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController; 

    UINavigationController *navigationController = [splitViewController.viewControllers lastObject]; 
    //splitViewController.delegate = (id)navigationController.topViewController; 

    //NEW IMPLEMENTATION BELOW 

    //Grab a reference to the RightViewController and set it as the SVC's delegate.  
    RightViewController *rightViewController = (RightViewController *) [[splitViewController.viewControllers objectAtIndex:1] topViewController]; 

    splitViewController.delegate = rightViewController; 

    //Grab a reference to the LeftViewController and get the first asset in the list. 
    UINavigationController *leftNavController = [splitViewController.viewControllers objectAtIndex:0]; 

    LeftViewController *leftViewController = (LeftViewController *)[leftNavController topViewController]; 

    AssetTracking *firstAsset = [[leftViewController assets] objectAtIndex:0]; 

    //Set it as the RightViewController's monster. 
    [rightViewController setAssetTracking:firstAsset]; 

    //Set the RightViewController as the left's delegate. 
    leftViewController.delegate = rightViewController; 


    } 
    return YES; 
} 

나는이를 추가하려고했지만 시도 때 나는 내가 오류가 마지막에 추가하는 경우

LoginViewController *lvc = (LoginViewController *) [storyBoard instantiateViewControllerWithIdentifier:@"login123"]; 
lvc.modalPresentationStyle = UIModalPresentationFullScreen; 
[splitViewController presentViewController:lvc animated:NO completion:nil]; 

을 제대로 작동 나던입니다 실행하려면

Warning : UISplitViewController : 0x9b64120에 대한보기를 LoginViewController : 0x9b5c5a0에 시도해보십시오! 뷰가 창 계층 구조에 없습니다!

어쨌든이 화면을 실행하거나 표시 할 수 있습니까? 현재 스토리 보드의보기는 단편으로 연결되어 있지 않으며 식별자로 호출합니다.

내가 오류 메시지에서 사용자

- (IBAction)enterCredentials 
{ 

NSString *hashedPassword = @""; 
hashedPassword = [self sha1:(passwordField.text)]; 

if ([[credentialsDictionary objectForKey:usernameField.text]isEqualToString:hashedPassword]) { 

    if([rememberLogin isOn]) 
    { 
     NSLog(@"save user details"); 

     if ([usernameField text ]){ 
      [keychain setObject:[usernameField text] forKey:(__bridge id)kSecAttrAccount]; 
     } 
     // Store password to keychain 
     if ([passwordField text]){ 
      [keychain setObject:[passwordField text] forKey:(__bridge id)kSecValueData]; 
     } 
    }else 
    { 
     NSLog(@"not saving user details"); 
     [keychain resetKeychainItem]; 
    } 

    usernameField.text = @""; 
    passwordField.text = @""; 


    //[self dismissViewControllerAnimated:NO completion:nil]; 
    [self performSegueWithIdentifier:@"loginCorrect" sender:self]; 
} 
else { 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"" message:@"The Username Or Password You Entered Is Incorrect" delegate:self cancelButtonTitle:@"Dismiss" otherButtonTitles:nil]; 
    [alert show]; 
} 
} 

답변

-1

을 확인하기 위해 사용하는 방법입니다, 당신은 당신이 LoginViewController을 제시하려고으로 UISplitViewController의 견해가 아직 호출함으로써 메인 UIWindow에 연결되지 않은 것을 볼 수 있습니다.

모달 LoginViewController를 제공하는 코드를 연기하도록하십시오. 어쩌면이 아이디어를 확인하기 위해 dispatch_after를 사용했을 수도 있습니다. 그렇다면 코드를 호출하기에 더 적합한 시간을 찾아야합니다.

필요할 때마다 LoginViewController를 rootViewController로 설정하는 것이 좋습니다. 따라서 전체 UISplitViewController를 숨길 수 있습니다. 예를 들어

:

그래서 지금 내가 다시 사용자가 확인 될 때 ​​내 rootView로 다른 설정을 어떻게해야합니까 방법 DidFinishLaunchWithOptions에서 rootViewController로 설정하면
// in application:DidFinishLaunchingWithOptions: 
if (/* iPad idiom && login required */) { 
    LoginViewController *lvc = (LoginViewController *) [storyBoard instantiateViewControllerWithIdentifier:@"login123"]; 
    self.window.rootViewController = lvc; 
} else { 
    // setup your UISplitViewController as usual 
} 
+0

. 내가 그들을 검증하는 데 사용하는 방법을 보려면 위를보십시오. 나는 segue를 사용하려했지만 더 이상 작동하지 않는다. – Karl

+0

사용자가 확인되면 appDelegate 또는 다른 책임 인스턴스에 대리자 패턴이나 알림을 통해 알릴 수있다. 담당 인스턴스에 알리면 appDelegate의 window.rootViewController를 다시 UISplitViewController로 바꿀 수 있습니다. –

+0

죄송합니다.이 방법에 대해 설명해 주시겠습니까? 감사의 말 : – Karl

관련 문제