2013-12-11 37 views
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]; 

如果我在最后我得到的错误添加它运行它

警告:尝试在UISplitViewController上显示LoginViewController:0x9b5c5a0:0x9b64120其视图不在窗口层次结构中!

有没有办法让这个屏幕运行/出现。目前,故事板上的视图与segue没有关联,我只是通过标识符来调用它。

这是我用来验证用户

- (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。

例如:

// 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

所以,现在如果我把它作为DidFinishLaunchWithOptions我怎么回去当用户验证设置对方为我rootView的RootViewController的。请参阅上文以查看我用来验证它们的方法。我试图使用segue,但显然不会再工作 – Karl

+0

当用户验证后,您可以通过委托模式或通知来通知appDelegate或其他负责任的实例。当负责任的实例被通知时,它可以将appDelegate的window.rootViewController交换回UISplitViewController。 –

+0

对不起,但你能解释如何做到这一点?谢谢 – Karl