RESideMenu之神坑
公司出新项目需求是侧滑功能,鉴于侧滑三方很多,所以打算使用三方实现,精挑细选下选择了RESideMenu,根据github上的DEMO实现了简单的侧滑功能,发现这个三方是简单易用,就选择它。
需求之坑:
测试DEMO时发现点击leftMenuView上的按钮并非通过RootVC进行Push,而是设置根视图,点击完后无法返回,需要重新设置rootViewController才可以返回主页。
// 此为官方DEMO LeftMenuViewController 代码片段
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
switch (indexPath.row) {
case 0:
[self.sideMenuViewController setContentViewController:[[UINavigationController alloc] initWithRootViewController:[[DEMOFirstViewController alloc] init]]
animated:YES];
[self.sideMenuViewController hideMenuViewController];
break;
case 1:
[self.sideMenuViewController setContentViewController:[[UINavigationController alloc] initWithRootViewController:[[DEMOSecondViewController alloc] init]]
animated:YES];
[self.sideMenuViewController hideMenuViewController];
break;
default:
break;
}
}
填坑之旅:
我们的需求是点击leftMenuView时通过根视图跳转,跳转后可返回根视图。
于是谷歌、百度、必应等搜索引擎各种找,但没找到解决方法。
没办法,自己尝试解决吧。
通过不断摸索发现RESideMenu.h类中有:
@property (strong, readwrite, nonatomic) UIViewController *contentViewController;
RESideMenu.m中的初始化方法,就是用contentViewController来接收根视图
- (id)initWithContentViewController:(UIViewController *)contentViewController leftMenuViewController:(UIViewController *)leftMenuViewController rightMenuViewController:(UIViewController *)rightMenuViewController
{
self = [self init];
if (self) {
_contentViewController = contentViewController;
_leftMenuViewController = leftMenuViewController;
_rightMenuViewController = rightMenuViewController;
}
return self;
}
于是我开始想是否可以通过_contentViewController来push视图呢?
于是我po打印self.sideMenuViewController.contentViewController发现它竟然是UINavigationController,于是我尝试进行强转,发现竟然可行。
实现代码如下:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
// 关键代码
[(UINavigationController *)self.sideMenuViewController.contentViewController pushViewController:[[MyCommissionViewController alloc] init] animated:YES];
[self.sideMenuViewController hideMenuViewController];
}
因为没有发现有类似问题解决方法,所以发个简书,希望可以帮助遇到同样问题小伙伴。