模态视图不会显示tabbarcontroller

时间:2011-07-21 12:42:53

标签: iphone objective-c uiviewcontroller uinavigationcontroller uitabbarcontroller

我正在构建一个具有通向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视图控制器中的模态视图,但我从未像我提到的那样到达那里。

我在这里做错了什么?谢谢你的帮助!!

3 个答案:

答案 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,然后显示。