美文网首页
RESideMenu之坑(通过根视图push)

RESideMenu之坑(通过根视图push)

作者: 程序H | 来源:发表于2017-06-05 19:53 被阅读393次

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

因为没有发现有类似问题解决方法,所以发个简书,希望可以帮助遇到同样问题小伙伴。

相关文章

  • RESideMenu之坑(通过根视图push)

    RESideMenu之神坑公司出新项目需求是侧滑功能,鉴于侧滑三方很多,所以打算使用三方实现,精挑细选下选择了RE...

  • 用过的第三方框架

    1.MMDrawerController(抽屉视图) 2.RESideMenu(抽屉视图) 3.AFNetwork...

  • RESideMenu源码分析

    RESideMenu是一个抽屉效果的第三方,实现原理为RESideMenu作为一个视图控制器,依次添加子视图左侧菜...

  • 请问push view controller 和 present

    要是用push view controller ,首先必须确保根视图是NavigationController,不...

  • RESideMenu 实现抽屉效果

    关于RESideMenu,可以度娘出来很多信息。 抽屉效果有3个视图,分别是左视图,中心视图(MMDrawerCo...

  • iOS pop 到指定界面

    当A push 到 B,再push到 C,想从C pop 回A,有两种方法 1、pop到根视图控制器,没什么特别的...

  • 踩坑记录

    如果当前页面是push出的页面,切换根视图控制器没问题;如果当前页面是present出的页面,切换跟视图控制器之前...

  • 再挖个坑,明天填,push的

    再挖个坑,明天填,push的 再挖个坑,明天填,push的 再挖个坑,明天填,push的 再挖个坑,明天填,pus...

  • iOS navigationcontroller pop 回到上

    1.从视图A中navigation controller push到视图B,当视图B navigationcont...

  • iOS响应链和控件手势

    1. 找到第一响应者,从视图最底层UIWindow到根视图和其子视图。通常通过hitTest:withEvent和...

网友评论

      本文标题:RESideMenu之坑(通过根视图push)

      本文链接:https://www.haomeiwen.com/subject/lnkwfxtx.html