2013-04-16 4 views
1

В моем приложении у меня есть ECSlidingViewController, объявленный как исходный корневой контроллер через Storyboard. В моем didFinishLaunchingWithOptions методе AppDelegate, я его экземпляр, как описано выше:Настоящий контроллер модального просмотра от ECSlidingViewController

self.slidingController = [[UIStoryboard storyboardWithName:@"AppStoryboard" bundle:[NSBundle mainBundle]] instantiateViewControllerWithIdentifier:@"ECSlidingViewController"]; 

То, что я хочу, чтобы иметь возможность показать контроллер представления глобальной модальный (например, когда толчок уведомление приходит, когда приложение активно.), Не зная, В настоящее время контроллер находится в верхней части контроллера скольжения.

Что я делаю (в моем AppDelegate):

[self.slidingController.topViewController presentModalViewController:controller animated:YES]; 

, но это не похоже на работу.

Есть ли способ представить модальный контроллер с моего контроллера скольжения независимо от того, какой контроллер является topViewController?

PS. Если нет, есть ли вероятность, что то, что я хочу, будет работать с SWRevealViewController вместо ECSlidingViewController? Если это стоит того, я перейду на мучительную дорогу.

Спасибо заранее!

+0

try '[self.slidingController presentModalViewController: контроллер анимированный: YES];' без '.topViewController' – alexcristea

+0

Я уже пробовал это. Это дает мне «Предупреждение: попытка представить в , чей вид не находится в иерархии окон!" – ozzotto

+0

Установите ECSlidingViewController как rootViewControlller 'self.rootViewController = [[UIStoryboard storyboardWithName: @" AppStoryboard "bundle: [NSBundle mainBundle]] instantiateViewControllerWithIdentifier: @" ECSlidingViewController "];' – alexcristea

ответ

1

Если ECSlidingViewController устанавливается в качестве исходного контроллера представления в раскадровке, то почему вы инстанцировании еще один в ваше приложение кода делегата? Делая это, вы вызываете свои методы на другом экземпляре ECSlidingViewController, чем тот, который выведен на экран раскадровкой. Вероятно, это источник вашей проблемы. Вместо этого, получить ссылку на ваш ECSlidingViewController так:

self.slidingController = self.window.rootViewController; 

Тогда попробуйте,

self.slidingController.topViewController presentModalViewController:controller animated:YES]; 

или

self.slidingController presentModalViewController:controller animated:YES]; 

Я не работал с ECSlidingViewController, так что я не знаю какие из них могут работать.

+1

Это был вопрос rdelmar! Создание экземпляра ECSlidingViewController в AppDelegate. Итак, что я сделал сейчас, это «я».slideController = (ECSlidingViewController *) self.window.rootViewController; ' – ozzotto

0

Попробуйте

UIViewController *rootViewController = self.window.rootViewController; 
// You now have in rootViewController the view with your "Hello world" label and go button. 

// Get the navigation controller of this view controller with: 
UINavigationController *navigationController = rootViewController.navigationController; 

[navigationController.topViewController presentModalViewController:controller animated:YES]; 
+0

Извините, это не работает. Мой rootViewController - это ECSlidingViewController, чей topViewController не всегда является UINavigationController. Спасибо! – ozzotto

Смежные вопросы