【问题标题】:MFSideMenu how to load in another ViewControllerMFSideMenu 如何在另一个 ViewController 中加载
【发布时间】:2013-07-25 03:46:57
【问题描述】:

我的应用基于LoginViewSecondView。我将在登录后显示 SecondView。

我不想在LoginView 上创建MFSideMenu。我想在SecondView 中使用MFSideMenu。我正在尝试在我的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 的 StoryBoard 属性(我想在其中加载 MFSideMenu):

http://santoro.co/ios_deve.png

当我使用初始 ViewController 开始构建我的应用程序时,MFSideMenu 正在工作。

我的SecondView 和这行:

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

但是当我尝试这个时:

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

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

MFSideMenu 不起作用。

【问题讨论】:

  • 在appDelegate中编写的代码,你必须在登录按钮的点击事件中编写该代码。

标签: ios objective-c mfslidemenu


【解决方案1】:

如果您尝试从应用委托访问它,您将在此处找到代码。诀窍是尝试获取 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;

【讨论】:

  • 我应该在哪里写上面的代码?因为我想实现同样的功能。
【解决方案2】:

拉入一个新的 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

【讨论】:

  • Cant i just doing it ??? UIViewController *baseViewApp = [storyboard instantiateViewControllerWithIdentifier:@"MFSideMenuContainerViewController"]; MFSideMenuContainerViewController *container = (MFSideMenuContainerViewController *)baseViewApp.view.window.rootViewController; ``
【解决方案3】:

我通过将 Lib 更改为 JASidePanels 来解决此问题。

【讨论】:

【解决方案4】:
 VideosViewController *videosViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"VideosViewController"];

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

【讨论】:

    【解决方案5】:
    UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:YourViewController];
    
    MFSideMenuContainerViewController *container = (MFSideMenuContainerViewController *)self.view.window.rootViewController;
    [container setCenterViewController:nav];
    

    【讨论】:

      【解决方案6】:

      不应该有任何链接(segues)或连接到主视图控制器和侧视图控制器(可以设置主视图和侧视图),设置标识符否则故事板ID(MainMenuViewController ---> mainVCSideMenuViewController ---> sideVC), import MainMenuViewController, SideMenuViewController, MFSideMenu on 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];
      

      【讨论】:

        【解决方案7】:
        1. 为登录和创建侧边菜单创建两种方法
        2. 在 Appdeleagate.h 添加这个
          • (void)createLoginPage;
          • (void)createSidemenuPage;
        3. 在 Appdelegate.m 中实现上述方法的定义。 示例:-
        4. 使用 SideMenuStoryBoardName 的名称为 sidemenu 创建 storybard,并在添加表视图中拖动一个视图控制器,这是用于 sidemenu 的。
        5. 使用 CenterStoryboardName 的名称为 home 创建 storybard,然后拖动一个视图控制器并设置该视图控制器的标识符。
        6. 使用appdelegate对象登录成功后调用createSidemenu方法。

        代码:

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

        【讨论】:

          猜你喜欢
          • 2019-09-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-03-19
          • 1970-01-01
          相关资源
          最近更新 更多