[英]Adding login screen in front of Cocoa Touch Tab Bar Application for IOS
仍然在这里绕开我的脑袋。 我什至没有关闭,但是无论如何...。我有一个从Xcode创建的TabBar应用程序。 它的工作原理是我有三个选项卡视图,知道如何操作等。
我想在整个过程前放置一个“ login” nib文件,要求用户回答一个(目前已硬编码)用户名和密码。 如果正确,则渲染选项卡部分,允许他们单击。
我已经编写了另一个应用程序,该应用程序负责用户名和密码部分,我无法从那里获取逻辑并将其放在TabApplication部分的前面。
有人有什么建议吗?
在您的AppDelegate中,在application didFinishLaunchingWithOptions
方法末尾,您将看到以下内容:
[window addSubview:tabcontroller.view];
[window makeKeyAndVisible];
return YES;
只需初始化您的登录视图控制器并将其添加到tabcontroller之后,如下所示:
initialScreenViewController = [[InitialScreenViewController alloc] init];
[window addSubview:tabcontroller.view];
[window addSubview:initialScreenViewController.view];
[window makeKeyAndVisible];
return YES;
在登录viewcontroller中,对用户进行身份验证后,可以像这样隐藏它:
[self.parentViewController.view setHidden:YES];
如果您具有退出功能,则可以再次显示它。
标准方法如下:
UIViewController
子类中。 通过调用在application:didFinishLaunchingWithOptions:
中的应用程序委托中以模态形式显示该视图
LoginController*loginController= ... ; // create the view controller for the login screen [self.tabController presentModalViewController:loginController animated:YES];
这样,将自动处理过渡等之间的动画。
您可以稍后在成功登录后将其关闭。可以通过在LoginController
内部执行以下操作:
[self.parentViewController dismissModalViewControllerAnimated:YES];
但是,登录完成后,我经常需要进行其他设置。 因此,我首先要告诉应用程序代表登录已完成,然后执行
[self.tabController dismissModalViewControllerAnimated:YES];
来自应用程序委托。 然后,我可以在那里执行其他任务。
为了与应用程序NSNotification
通信,我将使用NSNotification
,但这对您来说可能有点困难。
一种可能更容易理解(但loginDone
我口味)的方法是定义一个方法,例如在应用程序委托中使用loginDone
。 然后,在LoginViewController
,您可以执行
MyAppDelegate*appDelegate=[[UIApplication sharedApplication] delegate];
[appDelegate loginDone];
如果从默认选项卡栏应用程序开始,则可以这样操作:
[window addSubview:tabBarController.view];
与[window addSubview:/*whatever you called the view with the password stuff in it*/];
[passView removeFromSuperview]; [window addSubview:tabBarController.view];
并且您应该在常规的标签栏应用程序中。
我更喜欢执行以下操作:
在App Delegate的didFinishLaunchingWithOptions
:
FirstViewController *viewController1 = [[FirstViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
SecondViewController *viewController2 = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
ThirdViewController *viewController3 = [[ThirdViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
UINavigationController *navController1 = [[UINavigationController alloc] initWithRootViewController:viewController1];
UINavigationController *navController2 = [[UINavigationController alloc] initWithRootViewController:viewController2];
UINavigationController *navController3 = [[UINavigationController alloc] initWithRootViewController:viewController3];
self.tabBarController = [[UITabBarController alloc] init];
self.tabBarController.viewControllers = @[navController1, navController2, navController3];
LoginViewController *loginViewController = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
UINavigationController *loginNavController = [[UINavigationController alloc] initWithRootViewController:loginViewController];
self.window.rootViewController = loginNavController;
然后,在获得身份验证回调后,您可以在App Delegate中添加以下内容:
- (void)setAuthenticatedState:(BOOL)authenticated
{
if (authenticated == YES) {
dispatch_async(dispatch_get_main_queue(), ^(){
self.window.rootViewController = self.tabBarController;
});
}else{
// Stuff
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.