2013-02-12 3 views
3

Я пытаюсь интегрировать скользящее меню pkrevealcontroller в существующий проект iOS, который имеет существующую раскадровку с segues и т. Д. Я расширил UINavigationViewController и связал свой новый класс с Nav Controller на раскадровке. В моем приложении я делегат сделать следующее:Использование pkrevealcontroller на существующей раскадровке Xcode

MainNavViewController *frontViewController = [[MainNavViewController alloc] initWithRootViewController:[[myRootViewController alloc] init]]; 
UIViewController *rightViewController = [[menuViewController alloc] init]; 

self.revealController = [PKRevealController revealControllerWithFrontViewController:frontViewController 
                   rightViewController:rightViewController 
                      options:nil]; 

self.window.rootViewController = self.revealController; 

При запуске приложения, он успешно добавляет скользящий значок меню в панель навигации, и Frontview слайдов, как я хочу. Но он не использует заголовок или фрагменты, которые я добавил на раскадровку. Я просто пытаюсь сделать это.

+0

Что вы имеете в виду под "расширенной UINavigationViewController"? Куда входит PKRevealController? Есть ли какие-либо из контроллеров, которые вы упоминаете в своем вопросе в раскадровке, или эти новые, которые вы добавляете? – rdelmar

+0

rdelmar - я добавил остальную часть кода из делегата приложения. По расширению, я имею в виду, что я создал свой собственный пользовательский класс, который является подклассом uinavigationviewcontroller. MainNavViewController и myRootViewController находятся в моей раскадровке. –

+0

У вас есть FrontViewController или правый viewController в вашем раскадровке? Я пытаюсь понять, что у вас есть в раскадровке, и какие новые вещи вы добавляете в делегат приложения. – rdelmar

ответ

10

Я думаю, проблема заключается в том, что вы создаете новый frontViewController - это не тот, который находится в вашем раскадровке. Я не совсем уверен, как это сделать, но я бы попробовал это так. Я бы добавил UIViewController в раскадровку - изменил свой класс на PKRevealController и сделаю его начальным контроллером в раскадровке, но не подключаю его к остальным эпизодам. Дайте MainNavViewController идентификатор в IB, а затем изменить код в приложение делегата на это:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    self.revealController = (PKRevealController *)self.window.rootViewController; 
    UIViewController *rightViewController = [[menuViewController alloc] init]; 
    MainNavViewController *frontViewController = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil] instantiateViewControllerWithIdentifier:@"frontViewController"]; 
    [self.revealController setFrontViewController:frontViewController]; 
    [self.revealController setRightViewController:rightViewController]; 
    return YES; 
} 
+0

Ты мужчина! Огромное спасибо. Работает как шарм. –

+0

Я не понимаю. Означает ли это, что я должен сделать начальную точку «PKRevealController» моей раскадровки? Не могу ли я просто вызвать PKRevealController из обработчика кликов кнопки панели вкладок? – expert

+0

@ruslan. У вас есть контроллер панели вкладок в качестве контроллера корневого представления вашего окна? Вы хотите сделать PKRevealController одним из контроллеров на вкладке? – rdelmar

0

Мое приложение делегат не имеет переменную revealController поэтому пришлось создать такое руководство, в том, что то, что вы должны сделать?

0

В Swift использования этого,

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 

    var frontViewController:UIViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("frontVC") as! UIViewController 

    var leftViewController:UIViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("leftVC") as! UIViewController 

    var revealController:PKRevealController = PKRevealController(frontViewController: frontViewController, leftViewController: leftViewController) 

    self.window?.rootViewController = revealController 

    return true 
} 
Смежные вопросы