3

My App is based in a LoginView and SecondView. I will show SecondView after login.

I don't want to make MFSideMenu on LoginView. I would like to use MFSideMenu just in the SecondView. I am trying to do it in my AppDelegate.m:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

     UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:[NSBundle mainBundle]];


 UIViewController *baseViewApp = [storyboard instantiateViewControllerWithIdentifier:@"MFSideMenuContainerViewController"];

 MFSideMenuContainerViewController *container = (MFSideMenuContainerViewController *)baseViewApp.view.window.rootViewController;

 //MFSideMenuContainerViewController *container = (MFSideMenuContainerViewController *)self.window.rootViewController;

 UINavigationController *navigationController = [storyboard instantiateViewControllerWithIdentifier:@"navigationController"];

 UIViewController *leftSideMenuViewController = [storyboard instantiateViewControllerWithIdentifier:@"leftSideMenuViewController"];
 UIViewController *rightSideMenuViewController = [storyboard instantiateViewControllerWithIdentifier:@"rightSideMenuViewController"];


 [container setLeftMenuViewController:leftSideMenuViewController];
 [container setRightMenuViewController:rightSideMenuViewController];
 [container setCenterViewController:navigationController];

return YES;
}

In the image above I am showing my StoryBoard Properties from my SideMenuContainerView (Where I want to load the MFSideMenu):

http://santoro.co/ios_deve.png

The MFSideMenu is working when I start Build my app with the initial ViewController.

My SecondView and with this line:

MFSideMenuContainerViewController *container = (MFSideMenuContainerViewController *)self.window.rootViewController;

But when I try this:

UIViewController *baseViewApp = [storyboard instantiateViewControllerWithIdentifier:@"MFSideMenuContainerViewController"];

 MFSideMenuContainerViewController *container = (MFSideMenuContainerViewController *)baseViewApp.view.window.rootViewController;

The MFSideMenu does not work.

Caleb Kleveter
  • 11,170
  • 8
  • 62
  • 92
  • Code that is written in appDelegate, you have to write that code in click event of login button. – Mital Jul 25 '13 at 07:47

7 Answers7

3

If you are trying to access it form the app delegate you will find the code here. The trick is trying to get the UINavigationController. You can see here I find it via the window.

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:[NSBundle mainBundle]];

    MFSideMenuContainerViewController *container = (MFSideMenuContainerViewController *)self.window.rootViewController;
    HomeViewController * homeVC = [storyboard 
instantiateViewControllerWithIdentifier:@"HomeViewController"];

    NSArray *controllers = [NSArray arrayWithObject:homeVC];
    UINavigationController * navigationController = (UINavigationController* )container.centerViewController;
    navigationController.viewControllers = controllers;
John Ballinger
  • 7,380
  • 5
  • 41
  • 51
0

Pull on a new UIViewController that will act as the login view controller onto the MainStoryboard. In the attribute inspector change the identifier to LoginViewController (or something appropriate)

- (void)viewDidAppear:(BOOL)animated
{
     [super viewDidAppear:animated];

      UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
      UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"LoginViewController"];
      [vc setModalPresentationStyle:UIModalPresentationFullScreen];

      [self presentModalViewController:vc animated:YES];
}

and after successful login just dismiss LoginViewController

Toseef Khilji
  • 17,192
  • 12
  • 80
  • 121
  • Can`t i just doing it ??? ` UIViewController *baseViewApp = [storyboard instantiateViewControllerWithIdentifier:@"MFSideMenuContainerViewController"]; MFSideMenuContainerViewController *container = (MFSideMenuContainerViewController *)baseViewApp.view.window.rootViewController; `` – Marcelo Santoro Jul 25 '13 at 16:44
0

I fixed this by changing the Lib to JASidePanels.

Mike
  • 23,542
  • 14
  • 76
  • 87
0
 VideosViewController *videosViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"VideosViewController"];

            UINavigationController *navigationController = self.menuContainerViewController.centerViewController;
            NSArray *controllers = [NSArray arrayWithObject:videosViewController];
            navigationController.viewControllers = controllers;
    //VKJ
Vinod Joshi
  • 7,696
  • 1
  • 50
  • 51
0
UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:YourViewController];

MFSideMenuContainerViewController *container = (MFSideMenuContainerViewController *)self.view.window.rootViewController;
[container setCenterViewController:nav];
Robert
  • 5,278
  • 43
  • 65
  • 115
Rahul Mayani
  • 3,761
  • 4
  • 25
  • 40
0

there should not be any links(segues) or connections to main and side view controllers(from main and side can be set), set identifiers else storyboard ID (MainMenuViewController ---> mainVC, SideMenuViewController ---> sideVC), import MainMenuViewController, SideMenuViewController, MFSideMenu on loginview, now calling below will move view:

MainMenuViewController *mainMenuVC = [self.storyBoard instantiateViewControllerWithIdentifier: 
@"mainVC"];

SideMenuViewController *sideVC = [self.storyBoard instantiateViewControllerWithIdentifier:
@"sideVC"];

        MFSideMenuContainerViewController *container = [MFSideMenuContainerViewController
                                                        containerWithCenterViewController:mainMenuVC
                                                        leftMenuViewController:sideVC
                                                        rightMenuViewController:nil];
        [self.navigationController pushViewController:container animated:YES];
Abhi
  • 243
  • 4
  • 19
Shiva IOS
  • 11
  • 3
0
  1. Create two methods for login and sidemenu creatation
  2. In Appdeleagate.h Add this
    • (void)createLoginPage;
    • (void)createSidemenuPage;
  3. In Appdelegate.m implement the defination of the above methods. Example:-
  4. Create storybard for sidemenu with the name of SideMenuStoryBoardName and drag a view controller in that add table view this is for sidemenu.
  5. Create storybard for home with the name of CenterStoryboardName and drag a view controller and set the identifier for that view controller.
  6. Call the createSidemenu method after login success using appdelegate object.

Code:

(void)createLoginPage
{
    self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
    UIStoryboard *loginStoryBoard = [UIStoryboard storyboardWithName:LoginStoryBoardName bundle:nil];
    SigninViewController *signVC = [loginStoryBoard instantiateViewControllerWithIdentifier:SigninViewControllerIdentifier];
    UINavigationController* nav = [[UINavigationController alloc]initWithRootViewController:signVC];
    nav.navigationBar.hidden = YES;
    self.window.rootViewController = nav;
    [self.window makeKeyAndVisible];
}

(void)createSidemenuPage
{
    //-- Left ViewController
    UIStoryboard *sideMenuSB = [UIStoryboard storyboardWithName:SideMenuStoryBoardName bundle:[NSBundle mainBundle]];
    SideMenu *sideMenuVC = [sideMenuSB instantiateViewControllerWithIdentifier:SideMenuIdentifier];
    //-- Center ViewController
    UIStoryboard *centerVC = [UIStoryboard storyboardWithName:CenterStoryboardName bundle:[NSBundle mainBundle]];
    UINavigationController *navigationController = [[UINavigationController alloc]initWithRootViewController:centerVC];
    MFSideMenuContainerViewController *container  =[MFSideMenuContainerViewController containerWithCenterViewController:navigationController leftMenuViewController:sideMenuVC rightMenuViewController:nil];
    self.window.rootViewController = container;
    [self.window makeKeyAndVisible];
}
sanastasiadis
  • 1,182
  • 1
  • 15
  • 23
Rameshios
  • 1
  • 4