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
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.
Try FRDLivelyButton. In this library, you can change the UIBarButton image.
Hope it helps.
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
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
}
}