我在控制器中使用github可用项目加载侧菜单视图控制器ResideMenu
它允许您链接按钮以呼叫侧面菜单或从手机的一侧滚动以显示菜单。
我想仅在mainViewController上禁用该特定功能。 菜单的操作从手机左侧一直滑到右侧,然后拉出侧边菜单。
我正在使用导航控制器和故事板
我会发布代码,但有很多,请告诉我是否应该寻找任何特定代码发布
答案 0 :(得分:2)
所以这比我想象的要多一些。我创建了一个基于github中的RESideMenu提供的示例项目。
https://github.com/wottle/REsideDemoWithOnOff
在ExampleProjects目录中打开项目,看看它是如何工作的。
我所做的基础是:
修改现有协议以返回willShow...
方法的BOOL。在实现中,我更改了代码以检查返回值,这决定了菜单是显示还是现在。然后,因为菜单的显示和隐藏是由根视图控制器(而不是每个单独的视图控制器)控制的,所以我创建了一个新协议,可以选择由您将显示的每个单独的视图控制器实现。
@protocol RESideViewDelegate <NSObject>
@optional
- (BOOL)shouldAllowMenu;
@end
每个视图控制器都符合此协议,在这种情况下,它们实现了它。如果它们不符合协议,默认情况下它们将允许显示菜单。以下是如何使各个视图控制器符合.h:
中的新协议#import <UIKit/UIKit.h>
#import "RESideMenu.h"
@interface DEMOFirstViewController : UIViewController <RESideViewDelegate>
- (BOOL) shouldAllowMenu;
@end
并在视图控制器的.m中,提供了shouldAllowMenu方法的实现:
#import "DEMOFirstViewController.h"
@interface DEMOFirstViewController ()
@end
@implementation DEMOFirstViewController
- (BOOL) shouldAllowMenu
{
return YES;
}
@end
在第二个View控制器中,我返回no。所以第一个视图控制器允许菜单,第二个不允许。
- (BOOL) shouldAllowMenu
{
return NO;
}
然后,在根视图控制器的willShowMenuViewController
实现中,我看到当前视图控制器是否符合协议,如果是,请调用该方法并将其传递回RESideMenu 。
- (BOOL)sideMenu:(RESideMenu *)sideMenu willShowMenuViewController:(UIViewController *)menuViewController
{
NSLog(@"willShowMenuViewController: %@", NSStringFromClass([menuViewController class]));
UINavigationController *navController = sideMenu.contentViewController;
if( [navController.topViewController conformsToProtocol:@protocol(RESideViewDelegate) ])
{
UIViewController <RESideViewDelegate>*resideView = navController.topViewController;
return [resideView shouldAllowMenu];
}
return NO;
}
我确认这是有效的,但需要花些精力将其纳入您的项目。为了跟踪我的更改,我更改了RESideMenu.m和RESideMenu.h,并将上面的更改更改为根视图控制器和内容视图控制器。
答案 1 :(得分:0)
#import "ReSideMenu.h"
Add these two methods:
-(void)viewDidAppear:(BOOL)animated{
[self.sideMenuViewController setPanGestureEnabled:NO];
}
-(void)viewWillDisappear:(BOOL)animated{
[self.sideMenuViewController setPanGestureEnabled:YES];
}