SWRevealViewController - RightViewController

后端 未结 5 987
攒了一身酷
攒了一身酷 2020-12-06 21:22

I\'m using SWRevealViewController for implementing two side navigation views in my application. I followed the story board method and successfully implemented the rear view

相关标签:
5条回答
  • 2020-12-06 21:35

    enter image description here

    here is the sample project , this is working fine I worked out for your self, the download link is

    https://www.sendspace.com/file/0l2ndd

    after downloaded the project u want to delete the project , use this link

    https://www.sendspace.com/delete/0l2ndd/1b1bd537ad852b2fdea9b9a0cce3390f

    here u were need the right swipe on the front view controller , add the UIBarButtonItem in the particular view Controller

        @property (strong, nonatomic) IBOutlet UIBarButtonItem *rightIcon;   //this is for left bar button Item
        @property (nonatomic) IBOutlet UIBarButtonItem* revealButtonItem;  //this is for right bar button Item
    

    and add the some functions is View DidLoad

    - (void)viewDidLoad
    {
    [super viewDidLoad];
    
     //action for left Swipe
    [self.revealButtonItem setTarget: self.revealViewController];
    [self.revealButtonItem setAction: @selector( revealToggle: )];
    [self.navigationController.navigationBar addGestureRecognizer:  self.revealViewController.panGestureRecognizer];
    
    //action for Right Swipe
    [self.rightIcon setTarget: self.revealViewController];
    [self.rightIcon setAction: @selector( rightRevealToggle: )];
    [self.navigationController.navigationBar addGestureRecognizer: self.revealViewController.panGestureRecognizer];
    }
    

    Swift

    override func viewDidLoad() {
    super.viewDidLoad()
    //action for left Swipe
    self.revealButtonItem.target = self.revealViewController
    self.revealButtonItem.action = "revealToggle:"
        self.navigationController.navigationBar.addGestureRecognizer(self.revealViewController.panGestureRecognizer)
    //action for Right Swipe
    self.rightIcon.target = self.revealViewController
    self.rightIcon.action = "rightRevealToggle:"
        self.navigationController.navigationBar.addGestureRecognizer(self.revealViewController.panGestureRecognizer)
    }
    
    0 讨论(0)
  • 2020-12-06 21:35

    you can also do what shad suggested. But if you are getting a flag with the right you can just replace

    - (void)loadStoryboardControllers
    
    
    if ( self.storyboard && _rearViewController == nil )
    {
        //Try each segue separately so it doesn't break prematurely if either Rear or Right views are not used.
        @try
        {
            [self performSegueWithIdentifier:SWSegueRearIdentifier sender:nil];
        }
        @catch(NSException *exception) {}
    
        @try
        {
            [self performSegueWithIdentifier:SWSegueFrontIdentifier sender:nil];
        }
        @catch(NSException *exception) {}
    
        @try
        {
            [self performSegueWithIdentifier:SWSegueRightIdentifier sender:nil];
        }
        @catch(NSException *exception) {}
    }
    
    
    }
    

    with

     - (void)loadStoryboardControllers
    {
    
    //[self performSegueWithIdentifier:SWSegueRightIdentifier sender:nil];
    [self performSegueWithIdentifier:SWSegueFrontIdentifier sender:nil];
    [self performSegueWithIdentifier:SWSegueRearIdentifier sender:nil];
    
    }
    

    as you can see i commented out

    //[self performSegueWithIdentifier:SWSegueRightIdentifier sender:nil];
    

    becasue thats the one giving you an issue. If its the front or rear you can do the same

    0 讨论(0)
  • 2020-12-06 21:40

    There is a try-catch condition between line on 435 to 444 on SWRevealViewController.m. Just rearrange the statement as following

            [self performSegueWithIdentifier:SWSegueRightIdentifier sender:nil];
            [self performSegueWithIdentifier:SWSegueFrontIdentifier sender:nil];
            [self performSegueWithIdentifier:SWSegueRearIdentifier sender:nil];
    

    Now my right-menu/rightViewController is working even though i am not using the leftmenu/rearViewController.

    0 讨论(0)
  • 2020-12-06 21:46

    I figured out what the problem was. In loadStoryboardControllers method [self performSegueWithIdentifier:SWSegueRightIdentifier sender:nil]; was commented out. If we implement right view controller this has to be uncommented.

    0 讨论(0)
  • 2020-12-06 21:48

    You requested that I look at this thread.

    I do not have experience with storyboards.

    So, I am pasting below the code I have in my projects that allow for the Right Hand Side. Take a look at the section I commented. Hopefully, this will set you on the right path.

    Good luck

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:    (NSDictionary *)launchOptions
    {
        UIWindow *window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        self.window = window;
    
        FrontViewController *frontViewController = [[FrontViewController alloc] init];
        RearViewController *rearViewController = [[RearViewController alloc] init];
    
        UINavigationController *frontNavigationController = [[UINavigationController alloc] initWithRootViewController:frontViewController];
        UINavigationController *rearNavigationController = [[UINavigationController alloc] initWithRootViewController:rearViewController];
    
        SWRevealViewController *revealController = [[SWRevealViewController alloc] initWithRearViewController:rearNavigationController     frontViewController:frontNavigationController];
        revealController.delegate = self;
    
    // THIS SECTION RIGHT BELOW IS PROBABLY WHAT YOU WANT TO LOOK AT
        RightViewController *rightViewController = rightViewController =     [[RightViewController alloc] init];
        rightViewController.view.backgroundColor = [UIColor greenColor];
    
        revealController.rightViewController = rightViewController;
    
        revealController.bounceBackOnOverdraw=NO;
        revealController.stableDragOnOverdraw=YES;
    
        self.viewController = revealController;
    
        self.window.rootViewController = self.viewController;
        [self.window makeKeyAndVisible];
        return YES;
    }
    
    0 讨论(0)
提交回复
热议问题