iDevelopper / PBRevealViewController

A UIViewController subclass for revealing a left and/or right view controller above or below a main view controller.
MIT License
80 stars 16 forks source link

How can i show a AlertView on Tap or pangesture for Left menu opening on each specific viewcontroller #85

Closed shashi-kiwi closed 4 years ago

shashi-kiwi commented 4 years ago

Hi @iDevelopper I have to show a alertview showing message " Discard changes" with 2 options i.e Yes or no on each view controller throught the app on Tapping menu button or pan gesture for opening Left menu. If user choses yes then left menu will be shown else not.

How can i do this ? Any help would be helpful. Thanks in advance.

iDevelopper commented 4 years ago

Yes and what is the problem?

In your main view controllers:

import UIKit
import PBRevealViewController

class MainViewController: UIViewController {

    @IBOutlet weak var leftButton: UIBarButtonItem!
    @IBOutlet weak var rightButton: UIBarButtonItem!

    override func viewDidLoad() {
        super.viewDidLoad()

        leftButton.target = self.revealViewController()
        leftButton.action = #selector(RevealViewController.revealButtonTouchUpInside(_:))

        rightButton.target = self.revealViewController()
        rightButton.action = #selector(PBRevealViewController.revealRightView)
    }

In a subclass of PBRevealViewController:

import UIKit
import PBRevealViewController

class RevealViewController: PBRevealViewController, PBRevealViewControllerDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()

        self.delegate = self
        // ...
    }

    // MARK: - PBRevealViewControllerDelegate

    @objc func revealButtonTouchUpInside(_ button: UIBarButtonItem) {
        self.presentAlert()
    }

    func revealControllerPanGestureShouldBegin(_ revealController: PBRevealViewController, direction: PBRevealControllerPanDirection) -> Bool
    {
        if direction == .right {
            self.presentAlert()
            return false
        }
        return true
    }

    func presentAlert() {
        let alertController = UIAlertController(title: "Warning!", message: "Discard changes?", preferredStyle: .alert)

        let yesAction = UIAlertAction(title: "Yes", style: .destructive) { (action) in
            self.revealLeftView()
        }
        let noAction = UIAlertAction(title: "No", style: .default) { (action) in
            // Do something
        }

        alertController.addAction(yesAction)
        alertController.addAction(noAction)

        DispatchQueue.main.async {
            self.mainViewController?.present(alertController, animated: true, completion: nil)
        }
    }
}