iOS Интеграция PKRevealController с раскадровкой и автоматическим макетом

Я пытаюсь интегрировать PKRevealController в свой существующий проект.

https://github.com/pkluz/PKRevealController

Как настроить контроллер левого обзора, контроллер правого обзора и контроллер вида спереди, если я использую раскадровку? В ридми написано сделать...

PKRevealController *revealController = [PKRevealController revealControllerWithFrontViewController:frontVC leftViewController:leftVC options:options];

self.window.rootViewController = revealController;

Где бы я разместил эти строки кода в моем существующем проекте раскадровки? Или есть какие-то альтернативы, чтобы установить это?

Спасибо!


person Rohan Agarwal    schedule 14.02.2013    source источник
comment
Я ответил на аналогичный вопрос здесь: Использование pkRevealController на существующей раскадровке Xcode   -  person rdelmar    schedule 15.02.2013


Ответы (2)


Просто установите тип контроллера назначения перехода на PKRevealController и установите идентификатор раскадровки для переднего, левого и правого контроллера просмотра.

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{

  if ([segue.identifier isEqualToString:@"ToMain"]) {

    PKRevealController* prc = segue.destinationViewController;

    prc.frontViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"FrontViewController"];
    prc.leftViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"LeftViewController"];
    prc.rightViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"RightViewController"];

  }
}
person Hans One    schedule 10.06.2013
comment
Я не понимаю. Означает ли это, что я должен сделать PKRevealController точку входа в свою раскадровку? Разве я не могу просто вызвать PKRevealController из обработчика нажатия кнопки на панели вкладок? - person expert; 10.09.2013
comment
Стоит отметить, что это не работает. Вы можете настроить контроллер представления в IB на класс PKRevealController, но когда происходит переход, экран становится пустым, просто полупрозрачным серым. - person barndog; 26.07.2014
comment
@startupthekid Вам нужно как минимум 5 контроллеров представления в раскадровке, чтобы мой пример работал: исходный контроллер представления (куда вы помещаете код моего примера), PKRevealController, передний, левый и правый контроллеры представления. Для переднего, левого и правого вы должны установить идентификаторы раскадровки - person Hans One; 29.07.2014
comment
У меня больше 20. Все еще не работает. Это баг последней версии. - person barndog; 29.07.2014
comment
OK. Я больше не использую PKRevealController. Вместо этого я использую ECSlidingViewController. Может быть, это работает лучше для вас, тоже. - person Hans One; 30.07.2014

Я знаю, что это старая тема, но я все равно выложу ее здесь :)

Чтобы заставить PKRevealController работать с раскадровкой, вам понадобятся три контроллера представления.

  1. BaseController (я назвал его так), который расширяется с помощью PKRevealController, как будет служить базой для основного контроллера содержимого и контроллера навигации.

  2. MainController, который устанавливается как fronViewController.

  3. NaviController, который мы в основном используем в качестве левого ViewController, также известного как меню навигации.

К вашему сведению: вы можете спроектировать и закодировать MainController и NaviController из stroyboard.

Вот как мы это делаем; Сначала нам нужно расширить наш BaseController с помощью PKRevealController следующим образом;

@interface MainController : PKRevealController

Во-вторых, все еще в BaseController, добавьте эту строку в метод viewDidLoad;

//init the fonrViewController
UIViewController *homeController = [self.storyboard instantiateViewControllerWithIdentifier:@"homeScreen"];
//init the leftViewController
UIViewController *naviContrlller = [self.storyboard instantiateViewControllerWithIdentifier:@"quickNaviScreen"];

[self setFrontViewController:homeController];
[self setLeftViewController:naviContrlller];

Затем установите делегат PKRevealController как;

self.delegate = self;

Вот и все.

person Laky    schedule 26.08.2015
comment
Спасибо, это работает ! Но как мы можем показать / скрыть меню влево или вправо без свайпа спереди vc? Пожалуйста - person Rahmouni Rabii; 16.07.2017