我正在构建一个具有通向tabbar的登录屏幕的应用。我按照这个例子说明了如何在启动应用程序后推送模态视图(作为“登录”页面),然后将其关闭。
示例 - > Show / Hide tab bar
由于某些原因,它并没有真正起作用 - 当我启动应用程序时,我看到带有两个视图控制器的tabbar视图。没有登录页面。
这是我的代码:
的AppDelegate:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
UIViewController *viewController1 = [[FirstTab alloc] initWithNibName:@"FirstTab" bundle:NSBundle.mainBundle];
UIViewController *viewController2 = [[SecondTab alloc] initWithNibName:@"SecondTab" bundle:NSBundle.mainBundle];
UINavigationController *secondNavController = [[UINavigationController alloc]initWithRootViewController:viewController2];
self.tabBarController = [[UITabBarController alloc] init];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, secondNavController, nil];
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
return YES;
}
我的第一个标签(这是我理解所有这些模态视图业务需要发生的地方)
·H
@interface FirstTab : UIViewController
@end
的.m
//以下评论的更新代码
- (void)viewDidLoad
{
[super viewDidLoad];
SignIn *loginview = [[SignIn alloc] initWithNibName:@"SignIn" bundle:nil];
UINavigationController *controller = [[UINavigationController alloc] initWithRootViewController: loginview];
self.hidesBottomBarWhenPushed = YES;
[self presentModalViewController:controller animated:YES];
}
当然,我忽略了SignIn视图控制器中的模态视图,但我从未像我提到的那样到达那里。
我在这里做错了什么?谢谢你的帮助!!
答案 0 :(得分:1)
您必须在代码中包含此内容,
yourModelController =[[Yourmodelcontroller alloc]init];
UINavigationController *controller = [[UINavigationController alloc] initWithRootViewController: yourModelController];
self.hidesBottomBarWhenPushed = YES;
[[self navigationController] presentModalViewController:controller animated:YES];
[controller release];
希望这会帮助你。
答案 1 :(得分:1)
您可以使用:
[[self tabBarController] presentModalViewController:controller animated:YES];
因为第一个viewController1
是您的第一个标签,self.navigationController
可能是零。
在名为SignIn
的自定义视图控制器子类中,实现initWithNibName:bundle:
而不是init
。
-(id)initWithNibName:(NSString *)nibNameOrNil
bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// init here
}
}
现在当init / alloc调用它时:
SignIn *loginview = [[SignIn alloc] initWithNibName:@"SignIn" bundle:nil];
如果您的界面在NIB文件中,或者:
SignIn *loginview = [[SignIn alloc] initWithNibName:nil bundle:nil];
如果没有NIB。
还有什么把它作为任何导航控制器的根视图控制器?除非你需要更深入地介绍一些模型数据,否则只需直接呈现它:
// why ?
//UINavigationController *controller = [[UINavigationController alloc]
// initWithRootViewController: loginview];
//self.hidesBottomBarWhenPushed = YES;
//[self presentModalViewController:controller animated:YES];
[self presentModalViewController:loginView animated:YES];
答案 2 :(得分:1)
我遇到了模式不喜欢从viewDidLoad
显示的问题。尝试将代码添加到viewWillAppear
,然后显示。