带登录屏幕的UITabbarControl

时间:2010-10-13 10:02:52

标签: iphone

any-body尝试了一个场景,例如第一次显示的登录屏幕,在验证用户名之后,应用程序以uitabbar控制器启动。

我尝试使用uitabbar的应用程序。将登录屏幕作为第一个视图放在tabbar控制器中,使用“TabBarController.tabBar.hidden = TRUE;”但是视图变形了(tabbar的空间仍然是空的)这里有一个可以帮助我正确显示视图吗?

感谢, abhayadev s

4 个答案:

答案 0 :(得分:1)

另一种可能性是将登录viewController显示为模态viewController。 Modal VC隐藏了标签栏。

答案 1 :(得分:1)

创建另一个viewController(例如LoginViewController)。在 applicationDidFinishLaunching中的AppDelegate中: add(isLogged仅用于示例):

if (self.isLogged) {
   [window addSubview:self.tabBarViewController.view];
} else {
   LoginViewController *loginVC = [[LoginViewController alloc] initWithNibName:@"login" bundle:nil];
   [window addSubview:loginVC.view];
}

你应该在登录成功时调用一个方法,删除loginVC视图并在窗口上添加tabBarController.view。

这并不复杂。

答案 2 :(得分:1)

应用程序只需要使用LoginViewController,直到用户通过身份验证,注册,与FB或其他任何内容链接,然后应该释放LoginViewController,因为它不再需要。这个解决方案可能看起来有点矫枉过正,但我​​认为它延伸得很好。这是我如何做的,在我的情况下,我只有一个Splash屏幕显示一些信息,然后用户进入应用程序的主要部分:

首先,我实际上制作了一个简单的协议,我可以在我的MainAppDelegate.m文件中实现,称为SplashDelegate:

//SplashDelegate.h

@protocol SplashDelegate <NSObject>
 - (void) splashExit : (id) sender;
@end

然后我的MainAppDelegate实现了它。首先在应用程序启动后,self.window的{​​{1}}将指向我的SplashViewController,然后关闭后,rootViewController(在OP的情况下,他的MainViewController)将被实例化

以下是我的主要应用代理TabViewController文件的重要部分:

h

#import "SplashDelegate.h" @class MainViewController; @class SplashViewController; @interface MainWithLoginPageAppDelegate : NSObject <UIApplicationDelegate, SplashDelegate> { MainViewController *_viewController; UIWindow *_window; SplashViewController *_splashViewController; } @property (nonatomic, retain) IBOutlet UIWindow *window; @property (nonatomic, retain) IBOutlet MainViewController *viewController; @property (nonatomic, retain) IBOutlet SplashViewController *splashViewController; 文件的重要部分:

m

然后#import "MainWithLoginPageAppDelegate.h" #import "MainViewController.h" #import "SplashViewController.h" @implementation MainWithLoginPageAppDelegate @synthesize window=_window; @synthesize viewController=_viewController; @synthesize splashViewController = _splashViewController; - (void) splashExit : (id) sender { _viewController = [[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil]; self.window.rootViewController = self.viewController; [_splashViewController release]; } - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //initialize my splash controller _splashViewController = [[SplashViewController alloc] initWithNibName:@"SplashViewController" bundle:nil]; self.splashViewController.parentDelegate = self; self.window.rootViewController = self.splashViewController; [self.window makeKeyAndVisible]; return YES; //note that _viewController is still not set up... it will be setup once the login phase is done } (或SplashViewController)中您需要的只是您的登录测试和LoginViewController的属性。在parentDelegate内部,我将SplashViewController.h设为实例变量parentDelegate。另一个好主意是扩展上面的协议以减轻检查用户登录的责任,这样你就不会检查视图控制器类内部的登录。

编辑:在id <SplashDelegate> _parentDelegate内,您可以致电LoginViewController,并修改上述想法以包含您的登录检查。

希望这对某人有帮助!

答案 3 :(得分:0)

在第一个视图控制器中有登录页面。只有在导航到第二个视图控制器后才将标签栏添加到窗口中。显示它。

一切顺利。

相关问题