2

我是故事板的新开发者。我尝试制作带有滑出菜单的应用程序。为此,我使用库:SWRevealViewController 和教程: http: //www.appcoda.com/ios-programming-sidebar-navigation-menu/

我按照教程,但我加载应用程序,我有这个错误:

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil”

我的应用程序在此行崩溃:

  [self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];

我该如何设置 self.revealViewController ?

这是我的故事板更新

在此处输入图像描述

要了解我的应用程序,startviewController 用于下载和存储数据,下载后会显示 mainViewcontroller。

我想要我的主视图控制器上的滑出菜单,但我不能不这样做。

这里是我添加到我的 mainviewController viewdidload 的代码:

   - (void)viewDidLoad
    {
        [super viewDidLoad];
         self.contentView.autoresizesSubviews = YES;
        _sharedUser = [User sharedUser];

        ///slide out menu
        // Change button color
         //SWRevealViewController *revealViewController = [self.navigationController.storyboard instantiateViewControllerWithIdentifier:@"RevealViewController"];


        _sidebarButton.tintColor = [UIColor redColor];

        // Set the side bar button action. When it's tapped, it'll show up the sidebar.
        _sidebarButton.target = self.revealViewController;
        _sidebarButton.action = @selector(revealToggle:);

        // Set the gesture
        [self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];



        //end slide out



        self.contentView.backgroundColor = [UIColor cyanColor];


        if (_sharedUser.tokenString) {

        }
        else{

            [self showHomeWithoutLogginView];

        }



    }
4

3 回答 3

2

我正在查看您正在关注的教程。根据您的屏幕截图,您的故事板中缺少一些内容。

RevealViewController 应该连接两个控制器:一个前视图控制器(用于显示内容)和一个后视图控制器(用于显示导航菜单):

在此处输入图像描述

图片来源:http: //www.appcoda.com/ios-programming-sidebar-navigation-menu/

这些连接(segues)应标记为“显示视图控制器”,并且每个连接都必须相应命名:“sw_front”和“sw_rear”。

然后,您必须在导航菜单(后视图控制器)中添加菜单项并将每个单元格连接到相应的 viewController,为 segues 命名并将它们标记为 SWRevealViewController 类。您可能希望将前视图控制器连接到要首先显示的 viewController。

我强烈建议您按原样制作教程。我想我过去用过它,而且效果很好。如果您对此有任何疑问,请不要犹豫。

祝你好运!

于 2014-09-25T15:29:59.357 回答
1

多亏了莱德罗解决了!

这里是解决我的问题的 staviewcontroller 中需要的代码:

 SWRevealViewController *sideBar = [self.navigationController.storyboard instantiateViewControllerWithIdentifier:@"SWRevealViewController"];


 [self.navigationController pushViewController:sideBar animated:YES];
于 2014-09-29T06:37:28.137 回答
0

您使用的是最新版本的 SWRevealViewController 吗?AppCoda 教程已经过时,SWReveal 在 Git 上有很好的示例。

检查故事板上的 segue标识符类。sw_front 和 sw_rear 设置了吗?此外,在最新版本中,设置菜单/前视图的 segue 应该是:SWRevealViewControllerSegueSetController而不是旧的SWRevealViewControllerSegue.

编辑:

另请注意,调用[self.revealController panGestureRecognizer];足以启用手势;无需额外的手势。

编辑:

尝试像这样初始化:

MenuViewController *menuVC = [self.storyboard instantiateViewControllerWithIdentifier:@"MenuViewController"];

UINavigationController *frontNavigationController = [self.storyboard instantiateViewControllerWithIdentifier:@"MainNavigationController"];

SWRevealViewController *revealViewController = [[SWRevealViewController alloc] initWithRearViewController:menuVC frontViewController:frontNavigationController];

编辑:

您可以尝试向您的菜单按钮添加一个操作,如下所示:

[menuButton addTarget:self.revealViewController action:@selector(revealToggle:)
         forControlEvents:UIControlEventTouchUpInside];
于 2014-09-26T08:22:08.750 回答