0

i want to hide the side menu whenever the user taps anywhere outside. The menu is appearing but i can't find any way to come out of it. any suggestions regarding hidesOnTap will also be appreciated. I have also used a table view to display side menu contents, whenever user taps on any option it gets redirected to that page. How to hide the menu without making any selection. Below is the code

#import "MainMenuViewController.h"
#import "UIImageView+AFNetworking.h"
#import "ProfileViewController.h"
#import "ChatMenuHomeVC.h"


@interface MainMenuViewController ()
{
    NSString *username;
    NSString *profilestr;
}

@property (nonatomic, weak) IBOutlet UITableViewCell *cellMain;
@end

@implementation MainMenuViewController
@synthesize lblUserName,profilePic;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self)
    {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    //SideMenuToProfileView
    arrOfOptions = [[NSMutableArray alloc]init];

    [self addTitle:@"Home" imageName:@"icon-sidemenu-home.png" segueName:@"slidingToHome"];
    [self addTitle:@"My Chat" imageName:@"icon-sidemenu-chat.png" segueName:@"ChatHomeVc"];
     [self addTitle:@"Invite Friends" imageName:@"icon-sidemenu-invite.png" segueName:@""];
    [self addTitle:@"Settings" imageName:@"icon-sidemenu-setting.png" segueName:@"slidingToSettings"];


    [super viewDidLoad];

    UITapGestureRecognizer *tapAction1 = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(profileVC:)];
    tapAction1.numberOfTapsRequired = 1;
    profilePic.userInteractionEnabled = YES;
    [profilePic addGestureRecognizer:tapAction1];

    username  = [[NSUserDefaults standardUserDefaults]
                   stringForKey:@"UserName"];
    profilestr = [[NSUserDefaults standardUserDefaults] stringForKey: @"UserProfilePic"];
    self.lblUserName.text = username;
    [profilePic setImageWithURL:[NSURL URLWithString:profilestr] placeholderImage:[UIImage imageNamed:@"user"]];
    self.profilePic.layer.cornerRadius = self.profilePic.frame.size.width / 2;
    self.profilePic.clipsToBounds = YES;
    // Do any additional setup after loading the view.
}

-(void)addTitle:(NSString *)title imageName:(NSString *)imageName segueName:(NSString *)segue
{
    NSMutableDictionary *dic = [[NSMutableDictionary alloc]init];
    [dic setObject:title forKey:@"title"];
    [dic setObject:imageName forKey:@"image"];
    [dic setObject:segue forKey:@"segue"];
    [arrOfOptions addObject:dic];
}

- (void)profileVC:(UITapGestureRecognizer *)tapGesture
{
   [self performSegueWithIdentifier:@"SideMenuToProfileView" sender:self];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"SideMenuToProfileView"])
    {
        ProfileViewController *destViewController = segue.destinationViewController;
        destViewController.senderStr = @"fromUserSideMenu";
    }
}

1 Answers1

0

create a background View with size equal to the device in width and height. Add tap gesture recognizer to the view and hide side menu when the view is tapped. Or you can also use a button to get the same functionality writing the code in button action method.

Do as follows

 var backgroundView : UIView = UIView()

 func createBackgroundView()
{
    backgroundView = UIView(frame: CGRect(x: 0, y: 0, width: ScreenSize.SCREEN_WIDTH, height: ScreenSize.SCREEN_HEIGHT))
    backgroundView.tag = 10
    backgroundView.isHidden = true
}

You can unhide the background view when side menu appears

asd
  • 66
  • 7