我是一个带有storyboard的新开发者。我尝试使用滑出式菜单制作应用。 为此,我使用库:SWRevealViewController和教程:http://www.appcoda.com/ios-programming-sidebar-navigation-menu/。
我按照教程,但我加载应用程序,我有这个错误:
由于未捕获的异常而终止应用 ' NSInvalidArgumentException',原因:' *** - [__ NSArrayM insertObject:atIndex:]:object不能为nil'
我的应用程序崩溃在这一行:
[self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];
如何设置self.revealViewController?
这里我的故事板更新:
要了解我的应用程序,startviewController用于下载和存储数据,下载后,将显示mainViewcontroller。
我想在我的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];
}
}
答案 0 :(得分:2)
我正在查看您关注的教程。根据你的截图,你的故事板中缺少一些东西。
RevealViewController应与两个控制器连接:前视图控制器(用于显示内容)和后视图控制器(用于显示导航菜单):
图片的致谢:http://www.appcoda.com/ios-programming-sidebar-navigation-menu/
这些连接(segues)应标记为"显示视图控制器"并且每个都必须相应地命名:" sw_front"和" sw_rear"。
然后,您必须在导航菜单(后视图控制器)中添加菜单项,并将每个单元格连接到相应的viewController,为segue指定名称并将其标记为SWRevealViewController类。您可能希望将前视图控制器连接到要首先显示的viewController。
我强烈建议您按原样制作教程。我想我过去使用它并且效果很好。如果您对此有任何疑问,请不要犹豫。
祝你好运!
答案 1 :(得分:1)
<强>解决强> 感谢leandro!
这里是我的staviewcontroller中需要解决我问题的代码:
SWRevealViewController *sideBar = [self.navigationController.storyboard instantiateViewControllerWithIdentifier:@"SWRevealViewController"];
[self.navigationController pushViewController:sideBar animated:YES];
答案 2 :(得分:0)
您使用的是SWRevealViewController的latest version吗? 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];