嗨我有一个应用程序在分钟,目前有一个分割视图控制器。我想要做的是添加一个登录屏幕,以在应用程序的其他部分出现之前显示,或者如果不可能,可能会显示在导航控制器屏幕的左侧。在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];
}
}
所以,现在如果我把它作为DidFinishLaunchWithOptions我怎么回去当用户验证设置对方为我rootView的RootViewController的。请参阅上文以查看我用来验证它们的方法。我试图使用segue,但显然不会再工作 – Karl
当用户验证后,您可以通过委托模式或通知来通知appDelegate或其他负责任的实例。当负责任的实例被通知时,它可以将appDelegate的window.rootViewController交换回UISplitViewController。 –
对不起,但你能解释如何做到这一点?谢谢 – Karl