[英]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.