any-body尝试了一个场景,例如第一次显示的登录屏幕,在验证用户名之后,应用程序以uitabbar控制器启动。
我尝试使用uitabbar的应用程序。将登录屏幕作为第一个视图放在tabbar控制器中,使用“TabBarController.tabBar.hidden = TRUE;”但是视图变形了(tabbar的空间仍然是空的)这里有一个可以帮助我正确显示视图吗?
感谢, abhayadev s
答案 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)
在第一个视图控制器中有登录页面。只有在导航到第二个视图控制器后才将标签栏添加到窗口中。显示它。
一切顺利。