You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除特定UIView上RESideMenu的手势识别器

移除RESideMenu在特定视图上的手势识别器

你之前的代码没生效,核心原因是RESideMenu的手势识别器根本不在你当前控制器的self.view上——它的手势通常绑定在RESideMenu自身的容器视图(或侧边菜单的父视图)上,所以遍历当前view的手势自然找不到它们。

下面给你两种可行的解决方案,按需选择:

方案一:精准移除RESideMenu的内置手势

RESideMenu本身暴露了常用的手势属性,比如平移手势panGestureRecognizer和点击手势tapGestureRecognizer,你可以直接获取这些手势并移除:

// 先拿到RESideMenu的实例(假设你的根控制器是RESideMenu)
RESideMenu *sideMenu = (RESideMenu *)[UIApplication sharedApplication].keyWindow.rootViewController;

// 移除平移手势
if (sideMenu.panGestureRecognizer) {
    [sideMenu.view removeGestureRecognizer:sideMenu.panGestureRecognizer];
}

// 移除点击手势(如果不需要的话)
if (sideMenu.tapGestureRecognizer) {
    [sideMenu.view removeGestureRecognizer:sideMenu.tapGestureRecognizer];
}

方案二:遍历移除RESideMenu所有视图的手势

如果担心还有其他隐藏的手势,可以递归遍历RESideMenu的所有视图及子视图,把所有手势都移除:

// 递归移除视图及其子视图的所有手势
- (void)removeAllGesturesFromView:(UIView *)targetView {
    // 遍历当前视图的手势,注意要copy一份再遍历,避免数组变化导致崩溃
    for (UIGestureRecognizer *gesture in [targetView.gestureRecognizers copy]) {
        [targetView removeGestureRecognizer:gesture];
    }
    // 递归处理子视图
    for (UIView *subview in targetView.subviews) {
        [self removeAllGesturesFromView:subview];
    }
}

// 调用方法:拿到RESideMenu实例后传入它的view
RESideMenu *sideMenu = (RESideMenu *)[UIApplication sharedApplication].keyWindow.rootViewController;
[self removeAllGesturesFromView:sideMenu.view];

额外建议:临时禁用而非永久移除

如果你只是想在特定UIViewController显示期间禁用侧滑手势,而不是彻底移除,建议直接禁用手势的enabled属性,这样后续还能恢复:

// 在目标控制器的viewWillAppear中禁用
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    RESideMenu *sideMenu = (RESideMenu *)[UIApplication sharedApplication].keyWindow.rootViewController;
    sideMenu.panGestureRecognizer.enabled = NO;
    sideMenu.tapGestureRecognizer.enabled = NO;
}

// 在viewWillDisappear中恢复
- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    RESideMenu *sideMenu = (RESideMenu *)[UIApplication sharedApplication].keyWindow.rootViewController;
    sideMenu.panGestureRecognizer.enabled = YES;
    sideMenu.tapGestureRecognizer.enabled = YES;
}

内容的提问来源于stack exchange,提问作者Ravi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:11:19