美文网首页
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)

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