开发者

ModalView doesnt show up with tabbarcontroller

I am building an app that has a login screen that leads to a tabbar. I followed this example on how to push a modal view once you launch the app (as the "sign in" page) and then dismiss it.

Example --> Show / Hide tab bar

From some reason, it's not really working - when I launch the app, I see the tabbar view with the two view controllers. no sign in page.

here is my code:

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.rootViewCont开发者_Go百科roller = self.tabBarController;
[self.window makeKeyAndVisible];
return YES;

}

My first tab (which is where I understand all this modal view business needs to happen)

.h

@interface FirstTab : UIViewController

@end

.m

//UPDATED CODE PER COMMENT BELOW

- (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]; 

}

And of course, I dismiss the modal view in the SignIn view controller, though I never get there as I mentioned.

What am I doing wrong here? Thanks for the help!!


You could use :

[[self tabBarController] presentModalViewController:controller animated:YES];

since first viewController1 is your first tab, and self.navigationController might be nil.

In your custom view controller subclass called SignIn implement initWithNibName:bundle: instead if init.

-(id)initWithNibName:(NSString *)nibNameOrNil
              bundle:(NSBundle *)nibBundleOrNil {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // init here
    }
}

Now when init/alloc it call either :

SignIn *loginview = [[SignIn alloc] initWithNibName:@"SignIn" bundle:nil];

if your interface is in a NIB file, or :

SignIn *loginview = [[SignIn alloc] initWithNibName:nil bundle:nil];

if there no NIB.

Also why putting it as a root view controller of any navigation controller ? unless you need to go deeper in some model data presentation, just present it directly :

// why ?
//UINavigationController *controller = [[UINavigationController alloc]
//                                      initWithRootViewController: loginview];
//self.hidesBottomBarWhenPushed = YES; 
//[self presentModalViewController:controller animated:YES];
[self presentModalViewController:loginView animated:YES]; 


You have to include this in your code,

yourModelController =[[Yourmodelcontroller alloc]init];

UINavigationController *controller = [[UINavigationController alloc] initWithRootViewController: yourModelController];


self.hidesBottomBarWhenPushed = YES;
    [[self navigationController] presentModalViewController:controller animated:YES];
    [controller release];

hope this will help you out.


I've encountered issues where modals don't like showing from viewDidLoad. Try adding your code to your viewWillAppear and it should show.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜