0

I'm using SWRevealViewContrtoller for slide-out side menu in my app. Which is working fine. But I have an issue, how can I change side-bar button image when button clicked or user dragged side menu. I'm referring to this link.

Thanks in advance

Community
  • 1
  • 1

4 Answers4

1

Try to do following-

Method 1 (as per your reference link):

In your homeVC.m set SWRevealViewControllerDelegate like

@interface homeVC ()<SWRevealViewControllerDelegate> and add in viewDidLoad() self.revealViewController.delegate = self;

then add this method-

-(void)revealController:(SWRevealViewController *)revealController didMoveToPosition:(FrontViewPosition)position{

    //check position here

    if(position == FrontViewPositionLeft) {

        [self.sideBarButton setImage:[UIImage imageNamed:@"open.png"] forState:UIControlStateNormal]; //self.sideBarButton is your toggle button IBOutlet

    }
    else if(position == FrontViewPositionRight) {

        [self.sideBarButton setImage:[UIImage imageNamed:@"close.jpg"] forState:UIControlStateNormal];
    }

}

Method 2:

In your sideVC.m import-

#import "homeVC.h"
#import "SWRevealViewController.h"

Now add viewWillAppear() and viewWillDisappear()-

-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    homeVC *vc=(UserProfileViewController*)self.revealViewController.frontViewController;
    [vc.sideBarButton setImage:[UIImage imageNamed:@"close.jpg"] forState:UIControlStateNormal];

}
-(void)viewWillDisappear:(BOOL)animated{
    [super viewWillDisappear:animated];
    homeVC *vc=(UserProfileViewController*)self.revealViewController.frontViewController;
    [vc.sideBarButton setImage:[UIImage imageNamed:@"open.jpg"] forState:UIControlStateNormal];

}

difference between Method1 and Method2 is that, In Method1 when sideVC done animation i.e. position set to FrontViewPositionLeft or FrontViewPositionRight than button image changes by clicking button or dragging view. But in Method2 when sideVC start appearing button image change and when sideVC disappear.

Rohit Khandelwal
  • 1,778
  • 15
  • 23
0

Try FRDLivelyButton. In this library, you can change the UIBarButton image.

Hope it helps.

Maniganda saravanan
  • 2,188
  • 1
  • 19
  • 35
0

add <SWRevealViewControllerDelegate>

set self.revealViewController.delegate = self;

- (void)revealController:(SWRevealViewController *)revealController willMoveToPosition:(FrontViewPosition)position{

    //change button image below.

    if(position == FrontViewPositionLeft) {

        //drawer close

    } else {

        //drawer open
    }
}

This works for me. Happy coding

Pranav
  • 701
  • 4
  • 18
0

UPDATE Swift 3.0

add SWRevealViewControllerDelegate
in your viewDidLoad() add this

self.revealViewController().delegate = self 

 func revealController(_ revealController: SWRevealViewController!, willMoveTo position: FrontViewPosition) {
    if position == FrontViewPosition.left {
        //drawer close
    }
    else {
       //drawer open
    }
}
Yassine En
  • 144
  • 2
  • 8