2013-07-25 3 views
3

Мое приложение основано на LoginView и SecondView. Я покажу SecondView после входа в систему.MFSideMenu как загрузить в другой ViewController

Я не хочу делать MFSideMenu на LoginView. Я хотел бы использовать MFSideMenu только в SecondView. Я пытаюсь сделать это в моем 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; 
} 

В изображении выше, я хочу показать мою раскадровке Свойства моего SideMenuContainerView (Где я хочу, чтобы загрузить MFSideMenu):

http://santoro.co/ios_deve.png

MFSideMenu работает, когда я начинаю создавать свое приложение с начального ViewController.

Мои SecondView и с этой линии:

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

Но когда я пытаюсь это:

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

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

MFSideMenu не работает.

+0

код, написанный в AppDelegate, вы должны написать этот код в событии нажатия кнопки входа. – Mital

ответ

0

Потяните за новый UIViewController, который будет выступать в качестве контроллера входа в систему на MainStoryboard. В инспекторе атрибутов измените идентификатор LoginViewController (или что-то подходящее)

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

и после успешного входа в систему просто уволить LoginViewController

+0

Может, я просто это делаю ??? ' UIViewController * baseViewApp = [storyboard instantiateViewControllerWithIdentifier: @" MFSideMenuContainerViewController "]; MFSideMenuContainerViewController * container = (MFSideMenuContainerViewController *) baseViewApp.view.window.rootViewController; '' –

0

Я установил это, изменив Lib на JASidePanels.

+0

Сказать, правда ... https://github.com/edgecase/ECSlidingViewController намного лучше !!! –

0
VideosViewController *videosViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"VideosViewController"]; 

      UINavigationController *navigationController = self.menuContainerViewController.centerViewController; 
      NSArray *controllers = [NSArray arrayWithObject:videosViewController]; 
      navigationController.viewControllers = controllers; 
    //VKJ 
3

Если вы пытаетесь получить к нему доступ, делегат приложения вы найдете здесь код. Трюк пытается получить UINavigationController. Здесь вы можете увидеть это через окно.

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; 
+0

Его работа, спасибо! – Mohanraj

+0

Где я должен писать код выше? потому что я хочу реализовать такую ​​же функциональность. – iPhone

0
UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:YourViewController]; 

MFSideMenuContainerViewController *container = (MFSideMenuContainerViewController *)self.view.window.rootViewController; 
[container setCenterViewController:nav]; 
0

не должно быть никаких ссылок (перетекает) или соединения с основной и боковых контроллеров зрения (от основной и боковой может быть установлен), набор идентификаторов еще раскадровка идентификатор (MainMenuViewController --->mainVC, SideMenuViewController --->sideVC) import MainMenuViewController, SideMenuViewController, MFSideMenu на loginview, теперь вызывают ниже переедет вид:

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]; 
0
  1. Создать два метода для входа в систему и Sidemen у creatation
  2. В Appdeleagate.h Добавить это
    • (аннулируются) createLoginPage;
    • (пусто) createSidemenuPage;
  3. В приложении Appdelegate.m реализована защита указанных выше методов. Пример: -
  4. Создайте storybard для sidemenu с именем SideMenuStoryBoardName и перетащите контроллер вида в этом представлении таблицы, это для sidemenu.
  5. Создайте storybard для дома с именем CenterStoryboardName и перетащите контроллер вида и установите идентификатор для этого контроллера представления.
  6. Вызов метода createSidemenu после успешного входа в систему с использованием объекта appdelegate.

Код:

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