ios objective-c navigation swrevealviewcontroller

ios - SWRevealViewController no alternar



objective-c navigation (1)

Estoy intentando implementar SWRevealViewController en un proyecto sin usar el guión gráfico. Creo que es posible hacerlo, pero desafortunadamente fallé. El botón en la barra de navegación no realiza la acción "revealToggle" que se define en él. Entonces NavigationTableViewController nunca se muestra. No entiendo por qué ... Busqué varias horas una solución a este problema. Cualquier persona sería muy apreciada.

#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; }


Finalmente logré resolver mi problema. Según ejemplos de John Lluch , modifiqué mi código. Aquí está la solución sin usar 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; }