Swift SWRevealController без раскадровки

Я реализовал SWRevealController с раскадровкой, и все отлично работает, но теперь я хотел бы запрограммировать приложение без раскадровки. .

Может ли кто-нибудь помочь мне с реализацией? У меня есть FrontViewController и MenuViewController. Нужен ли мне для этого дополнительный SWRevealViewController, и если да, то что мне нужно кодировать?

Я знаю, что есть некоторая информация о SWRevealController, но она находится в Objective-C, и у меня есть некоторые проблемы с напишите это в Swift 2.0.


person manu    schedule 13.01.2016    source источник
comment
куда ты попал.....   -  person Anbu.Karthik    schedule 13.01.2016


Ответы (3)


Вы можете сделать это следующим образом.

Создайте одну функцию createSlidingMenu в appDelegate.

func createSlidingMenu(){

        let frontViewController = //create instance of frontVC
        let rearViewController  = //create instance of rearVC(menuVC)


        //create instance of swRevealVC based on front and rear VC
        let swRevealVC = SWRevealViewController(rearViewController: rearViewController, frontViewController: frontViewController);
        swRevealVC.toggleAnimationType = SWRevealToggleAnimationType.EaseOut;
        swRevealVC.toggleAnimationDuration = 0.30;

        //set swRevealVC as rootVC of windows
        self.window?.rootViewController = swRevealVC!;
}

позвони createSlidingMenu в application:didFinishLaunchingWithOptions: и можешь идти.

person Hitendra Solanki    schedule 13.01.2016
comment
понял.. добавил ваш метод в appDelegate.. вызвал его в application:didFinishLaunchingWithOptions: с помощью self.createSlidingMenu() В ViewController я создал кнопку, которая должна открывать скользящее меню с помощью: menuButton.addTarget(self.revealViewController(), action: Selector("revealToggle:"), forControlEvents: .TouchUpInside) - person manu; 13.01.2016
comment
да спасибо большое! Я также понял, как переключиться на новый ViewController: revealViewController().pushFrontViewController(NextViewController(), animated: true) - person manu; 13.01.2016
comment
приятно знать, что ваша проблема решена. Было бы здорово, если бы вы приняли мой ответ и проголосовали за него, так что это поможет сообществу найти рабочие ответы. - person Hitendra Solanki; 13.01.2016
comment
вам также необходимо изменить цвет навигационного контроллера, потому что, если вы используете навигационный контроллер в качестве frontVC, он всегда будет над окном - person Hitendra Solanki; 13.01.2016
comment
Как создаются экземпляры frontViewController и rearViewController? Попытка сделать это дает ошибки: let frontViewController = frontViewController(). И я думаю, что это и это тоже неправильно: let frontViewController = SWRevealViewControllerSegueSetController(), let rearViewController = TestRearViewController(). - person Miguel Valencia; 02.06.2017
comment
@MiguelValencia Должно быть так: «пусть frontViewController = HomeViewController ()» «пусть тыловой ViewController = LeftMenuViewController ()» - person Hitendra Solanki; 07.06.2017

Это сработало для меня (в Swift 3.1)

  1. В StoryBoard создайте MasterViewController, HomeViewController (встроенный в UINavigationController) с идентификатором раскадровки «HomeViewController» и MenuViewController (встроенный в UINavigationController) с идентификатором раскадровки «MenuViewController».введите здесь описание изображения
  2. Создайте класс MasterViewController и свяжите его с UIViewController (MasterViewController) в раскадровке и реализуйте протокол SWRevealViewControllerDelegate (см. код)

    import UIKit
    
    class MasterViewController: UIViewController, SWRevealViewControllerDelegate {
    
    override func viewDidLoad() {
        super.viewDidLoad()
    
        let frontNavigationController:UINavigationController
        let rearNavigationController:UINavigationController
        let revealController = SWRevealViewController()
        var mainRevealController = SWRevealViewController()
    
        let menuTable = self.storyboard?.instantiateViewController(withIdentifier:  "MenuViewController")as! MenuViewController
        let homepage = self.storyboard?.instantiateViewController(withIdentifier: "HomeViewController") as! HomeViewController
    
        frontNavigationController =  UINavigationController(rootViewController: homepage)
        rearNavigationController =  UINavigationController(rootViewController: menuTable)
        rearNavigationController.setNavigationBarHidden(true, animated: false)
    
        revealController.frontViewController = frontNavigationController
        revealController.rearViewController = rearNavigationController
        revealController.delegate = self
        mainRevealController  = revealController
    
        UIApplication.shared.delegate!.window?.rootViewController = mainRevealController
    }
    

    }

  3. В качестве альтернативы вы можете опустить MasterViewController и:

    • implement SWRevealViewControllerDelegate in AppDelegate and
    • скопируйте код тела viewDidLoad, написанный выше, в application:didFinishLaunchingWithOptions:
person Beppex    schedule 05.07.2017

В дополнение к Hitendra я модифицирую следующий код, чтобы добавить навигацию в Home

AppDelegate.swift

func toHome() {
    let frontViewController = HomeController()//create instance of frontVC
    let rearViewController  = MenuController() //create instance of rearVC(menuVC)

    let swRevealVC = SWRevealViewController(rearViewController: rearViewController, frontViewController: frontViewController);
    swRevealVC?.toggleAnimationType = SWRevealToggleAnimationType.easeOut;
    swRevealVC?.toggleAnimationDuration = 0.30;

    navigationController = UINavigationController(rootViewController: swRevealVC!)
    self.window?.rootViewController = navigationController
}

LoginController.swift, когда пользователь нажимает кнопку входа

@objc private func login() {
     let appDelegate = UIApplication.shared.delegate as! AppDelegate
     appDelegate.toHome()
     return
}

HomeController.swift

override func viewDidLoad() {
    super.viewDidLoad()

    setupLayout() // layout programmatically, I didn't put code here

    let menuButton = UIBarButtonItem(title: "Menu", style: .plain, target: self, action: #selector(HomeController.menu))
    self.revealViewController().navigationItem.leftBarButtonItem = menuButton

}

@objc private func menu() {
    revealViewController().revealToggle(self)
}
person Jon    schedule 15.12.2017