Быстрые действия SWRevealViewController и 3D Touch

У меня есть приложение, реализующее боковое меню в Swift. ( http://www.appcoda.com/sidebar-menu-swift/)

Я реализовал 3D Touch ярлык, быстрые действия, он почти работает.

Проблема в том, что я прихожу прямо к моему представлению без создания объекта ViewViewController() со следующим кодом:

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let navVC = storyboard.instantiateViewControllerWithIdentifier("newsViewController") as! UINavigationController
self.window?.rootViewController?.presentViewController(navVC, animated: true, completion: nil)

Я не знаю, как / где создается экземпляр ViewViewController().

Я имею:

self.revealViewController() == nil 

Что происходит сейчас, это меню не хочет открываться.

Спасибо за помощь:-)

4 ответа

Решение

Для тех, кто хочет сделать это с помощью Swift:

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let frontNavigationController = storyboard.instantiateViewControllerWithIdentifier("planningViewController")
let rearNavifationController = storyboard.instantiateViewControllerWithIdentifier("menuViewController")
let mainRevealController : SWRevealViewController = SWRevealViewController(rearViewController: rearNavifationController, frontViewController: frontNavigationController)
self.window?.rootViewController? = mainRevealController

Вы можете найти свой ответ по этой ссылке: Как вывести viewcontroller из appdelegate в раскадровку

Я пишу код, как показано ниже. Это работает для меня.

    UIStoryboard *st = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    SWRevealViewController *mainRevealController = [[SWRevealViewController alloc] init];
    CaseCollectionViewController *descController = (CaseCollectionViewController*)[st instantiateViewControllerWithIdentifier: @"CaseCollection"];
    descController.selectedLevel = @"pll";
    descController.title = @"PLL";

    //UINavigationController *frontNavigationController = [[UINavigationController alloc] initWithRootViewController:descController];
    UINavigationController *frontNavigationController = (UINavigationController*)[st instantiateViewControllerWithIdentifier: @"NavigationViewCtrl"];
    [frontNavigationController setViewControllers:@[descController]];
    SidebarTableViewController *rearViewController = (SidebarTableViewController*)[st instantiateViewControllerWithIdentifier: @"SideBarView"];
    mainRevealController.rearViewController = rearViewController;
    mainRevealController.frontViewController = frontNavigationController;
    self.window.rootViewController = mainRevealController;

Чтобы получить ваш ViewControlled, вы должны сделать его как InitialViewController в раскадровке, не нужно писать код в Appdelgate.

Вы можете найти лучший пример в примере с раскадровкой в git hub или настроить как на скриншоте ниже

Код Objective-c для глубокого связывания. Он откроет дом с боковым меню и подтолкнет дом (контроллер вид спереди) к контроллеру уведомлений.

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UINavigationController *frontViewControllerNav = [storyboard instantiateViewControllerWithIdentifier:@"homeNav"];// navigation controller of home screen..
UINavigationController *rearViewControllerNav = [storyboard instantiateViewControllerWithIdentifier:@"sideMenuNav"];//navigation controller of menu screen..

SWRevealViewController *revealController = [[SWRevealViewController alloc] initWithRearViewController:rearViewControllerNav frontViewController:frontViewControllerNav];
revealController.delegate = self;
UIViewController *notificationView=[storyboard instantiateViewControllerWithIdentifier:@"notificationVC"];
[frontViewControllerNav pushViewController:notificationView animated:NO];
revealController.bounceBackOnOverdraw=NO;
//revealController.stableDragOnOverdraw=YES;
self.window.rootViewController = revealController;
Другие вопросы по тегам