Swrevealviewcontroller Close Rear View When Tapping Front View

SWRevealViewController: Remove interaction on frontview when rearview is revealed

I've recently come up with a solution that I wanted to share
(sorry if it's 2 months late).

To disable user interaction on the Front View while the Menu is open, I added the following codes on my MenuViewController:

on viewWillAppear:

[self.revealViewController.frontViewController.view setUserInteractionEnabled:NO];

and on viewWillDisappear:

[self.revealViewController.frontViewController.view setUserInteractionEnabled:YES];

This will disable all user interactions on the Front View Controller, which means that the slide / tap gestures to CLOSE the menu will also be DISABLED.

Now, I have created a ParentViewController and made all the view controllers (the menu items) a subclass of it.

on my viewDidLoad, I put the following codes:

SWRevealViewController *revealController = [self revealViewController];
[revealController panGestureRecognizer];
[revealController tapGestureRecognizer];

If you run your app at this point, it would appear that the Tap Gesture works (a tap on the Front View will close the Menu), but NOT the Pan Gesture. I'm not sure why this is so, but in order to enable the slide gesture to CLOSE your menu, add the following code in your MenuViewController:

on viewWillAppear:

[self.revealViewController.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];

To summarize, here's what you need:

On your MenuViewController:

-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];

[self.revealViewController.frontViewController.view setUserInteractionEnabled:NO];
[self.revealViewController.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];
}

-(void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];

[self.revealViewController.frontViewController.view setUserInteractionEnabled:YES];
}

And on your menu items' view controller (you can make a ParentViewController for all of them):

-(void)viewDidLoad {
[super viewDidLoad];

SWRevealViewController *revealController = [self revealViewController];
[revealController panGestureRecognizer];
[revealController tapGestureRecognizer];
}

Hope this helps!

iOS- darken front view when rear view open using SWRevealViewController

In your MenuVC (the table View controller that lies behind and acts as a side menu). Add the following.

let darkView = UIView()

override func viewWillAppear(_ animated: Bool) {

darkView.addGestureRecognizer(revealViewController().tapGestureRecognizer())
darkView.backgroundColor = UIColor.black.withAlphaComponent(0.7)
darkView.frame = self.revealViewController().frontViewController.view.bounds
self.revealViewController().frontViewController.view.addSubview(darkView)
}

override func viewWillDisappear(_ animated: Bool) {
darkView.removeFromSuperview()
}

Pass data to rear view using SWrevealviewcontroller

Well it was a good question. Finally after a lot of effort I found a way out for you.

In your viewController.swift file,

import UIKit

//Add this line before your class definition
var homeController: ViewController!

class ViewController: UIViewController {
.......

override func viewDidLoad() {
super.viewDidLoad()
home = self
.....
}

}

In your rear view controller, you can access the members of the front View Controller.

Hope this helps :-)

How to disable front ViewController's view when RearViewController's view is active SWRevealViewController in Swift 3.0

You should handle this in your Menu view controller rather. The reveal view controller has access to the frontViewController and that property can be used to set the userInteractionEnabled as false.

So, in your Menu View Controller write this this code in the viewWillAppear method:

 override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.revealViewController().view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
self.revealViewController().frontViewController.revealViewController().tapGestureRecognizer()
self.revealViewController().frontViewController.view.isUserInteractionEnabled = false
}

And in the same Menu view Controller add the following code in the viewWillDisappear method:

override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
self.revealViewController().frontViewController.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
self.revealViewController().frontViewController.view.isUserInteractionEnabled = true
}

The above code also adds other gestures, but those can be optional. The main action happens at these two lines:

self.revealViewController().frontViewController.view.isUserInteractionEnabled = false

self.revealViewController().frontViewController.view.isUserInteractionEnabled = true

Hope this solves your issue. Cheers.

SWRevealViewController disable interaction with front view(map) when left view are revealed swift 3

had to implement:

    override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)

self.revealViewController().view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
self.revealViewController().frontViewController.revealViewController().tapGestureRecognizer()
self.revealViewController().frontViewController.view.isUserInteractionEnabled = false
}

override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)

self.revealViewController().frontViewController.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
self.revealViewController().frontViewController.view.isUserInteractionEnabled = true
}

on my menu view controller



Related Topics



Leave a reply



Submit