2014-10-12 3 views
1

У меня снова проблема. Я работаю с раскадровкой в ​​Xcode 6 с Swift как языком программирования. Прежде чем я хочу представить представление (с контроллером представления) при запуске моего приложения, я хочу проверить подключение к Интернету и подключение к серверу. Если оба соединения доступны, я хочу представить view1, и если нет, я хочу представить view2. Но я не хочу показывать представление с помощью счетчика при проверке соединения. Поэтому я подумал, что могу управлять этим классом AppDelegate. В функции func application() Я хочу решить, какой вид (view1 или view2) загружен вначале. Но для этого решения я должен создать два контроллера представлений, которые связаны с двумя моими представлениями в раскадровке. Я не знаю, возможно ли это.Управление представлением контроллера раскадровки в классе AppDelegate

Итак, мой вопрос: возможно ли создать эти два конкретных диспетчера представления раскадровки в моем классе AppDelegate? И если это возможно, как я могу это сделать с помощью кода?

Если это невозможно, как я могу решить свою проблему? На данный момент я всегда показывать контроллер с вращателем (view0) видом и, если соединение доступно я иду view1 и если соединение не доступно Я хожу в VIEW2 от моего контроллера view0 так:

override func viewDidAppear(animated: Bool) { //some code self.presentViewController(view1, animated: true, completion: nil) //some other code }

+0

Я думаю, что это именно то, что вы ищете http://stackoverflow.com/questions/11607024/how-to-load-different-view-controller-class-from-app-delegate-at-the-time -of-app и http://stackoverflow.com/questions/8186375/storyboard-refer-to-viewcontroller-in-appdelegate –

+0

Я тоже нашел эти ссылки, но я хочу сделать это с помощью Swift, а не с Objective-C. – Martin

ответ

3

вы можете загрузить конкретный контроллер представления из раскадровки с этим вызовом:

let viewController = self.window?.rootViewController?.storyboard?.instantiateViewControllerWithIdentifier("SomethingViewController") as UIViewController 
self.window?.rootViewController = viewController 

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

Было бы лучше, чтобы показать временный контроллер представления во время ожидания, если эти тесты не очень быстро :)


Edit: исправлен код.

Это хакерское решение, так как оно загрузит новый rootViewController после инициализации оригинала, я полагаю. Но это должно сработать.

Более подходящая альтернатива могла бы создать проект как «пустое приложение» и загрузить раскадровку по коду непосредственно в требуемом контроллере.

+0

Но я не могу создать экземпляр контроллера представления в AppDelegate, используя ваш код. Это возможно в другом контроллере представления, но не в AppDelegate. – Martin

+0

Вы правы, я изменил его, теперь он должен работать –