Reputation: 195
I'm trying to implement SWRevealViewController in a project without using storyboard. I think it's possible to do but i unfortunately failed. The button in the navigation bar does not perform the "revealToggle" action that is defined on him. So NavigationTableViewController is never shown. I don't understand why... I searched several hours a solution to this problem. Anyone help would be much appreciated.
#import "ContentViewController.h"
#import "NavigationTableViewController.h"
@interface ContentViewController()<SWRevealViewControllerDelegate>
@end
@implementation ContentViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
//[self.navigationItem setHidesBackButton:YES animated:YES];
UIWindow *window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window = window;
ContentViewController *frontViewController = self;
NavigationTableViewController *rearViewController = [[NavigationTableViewController alloc] init];
UINavigationController *frontNavigationController = [[UINavigationController alloc] initWithRootViewController:frontViewController];
SWRevealViewController *revealController = [[SWRevealViewController alloc] initWithRearViewController:rearViewController frontViewController:frontNavigationController];
revealController.delegate = self;
[revealController panGestureRecognizer];
[revealController tapGestureRecognizer];
self.viewController = revealController;
self.window.rootViewController = self.viewController;
UIBarButtonItem *revealButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"reveal-icon.png"]
style:UIBarButtonItemStyleBordered target:revealController action:@selector(revealToggle:)];
self.navigationItem.leftBarButtonItem = revealButtonItem;
}
Upvotes: 3
Views: 846
Reputation: 195
I finally managed to solve my problem. According to John Lluch examples, i modified my code. Here is the solution without using storyboards :
AppDelegate.h
#import <UIKit/UIKit.h>
#import "SplashScreenController.h"
#import "SWRevealViewController.h"
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) UINavigationController *navigationController;
@property (strong, nonatomic) SplashScreenController *viewController;
@property (strong, nonatomic) SWRevealViewController *revealController;
@end
AppDelegate.m
#import "AppDelegate.h"
#import "ContentViewController.h"
#import "NavigationTableViewController.h"
@interface AppDelegate()<SWRevealViewControllerDelegate>
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
SplashScreenController *frontViewController = [[SplashScreenController alloc] initWithNibName:@"SplashScreenController" bundle:nil];
NavigationTableViewController *rearViewController = [[NavigationTableViewController alloc] init];
UINavigationController *frontNavigationController = [[UINavigationController alloc] initWithRootViewController:frontViewController];
SWRevealViewController *revealController = [[SWRevealViewController alloc] initWithRearViewController:rearViewController frontViewController:frontNavigationController];
revealController.delegate = self;
self.window.rootViewController = revealController;
[self.window makeKeyAndVisible];
return YES;
}
ContentViewController.h
#import <UIKit/UIKit.h>
@interface ContentViewController : UIViewController
@end
ContentViewController.m
#import "ContentViewController.h"
#import "SWRevealViewController.h"
#import "NavigationTableViewController.h"
#import <sqlite3.h>
@interface ContentViewController()<SWRevealViewControllerDelegate>
@end
@implementation ContentViewController
- (void)viewDidLoad {
[super viewDidLoad];
SWRevealViewController *revealController = [self revealViewController];
[revealController panGestureRecognizer];
[revealController tapGestureRecognizer];
UIBarButtonItem *revealButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"reveal-icon.png"] style:UIBarButtonItemStyleBordered target:revealController action:@selector(revealToggle:)];
self.navigationItem.leftBarButtonItem = revealButtonItem;
}
Upvotes: 2