繁体   English   中英

SplitView Ipad中的登录屏幕

[英]Login Screen in 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:0x9b64120上显示LoginViewController:0x9b5c5a0,其视图不在窗口层次结构中!

无论如何,要使此屏幕运行/显示。 目前,情节提要上的视图未通过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];
}
}

从错误消息中,您可以看到在尝试显示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
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM