Перемещайтесь между несколькими раскадровками, заменив корневой контроллер Windows.

Чтобы перемещаться между VC на одной раскадровке, я использую первый пользовательский переход из сообщения: bidirectional перемещение раскадровки без стека Это заменяет корневой контроллер представления окна целевым контроллером представления, поэтому VC не складываются и не вызывают проблем с распределением памяти.

Мне нужно использовать несколько раскадровок, и поэтому я ищу способ перехода на вторую раскадровку, которая заменяет корневой контроллер Windows начальным VC новой раскадровки (т.е. аналогично пользовательскому переходу, который я использовал в остальной части проект.)

В идеале решение должно работать для IOS6 и IOS7 (метод псевдо-перехода обновлен только до IOS7).

Любые идеи?


person Mat    schedule 01.12.2013    source источник


Ответы (1)


Вы не можете сделать это с переходом. Переходы могут быть сделаны только между контроллерами в одной и той же раскадровке. Единственный способ сделать это - в коде, создав экземпляр этого первого контроллера и установив его в качестве контроллера корневого представления окна.

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"SomeOtherStoryboard" bundle:nil];
NewController *new = [sb instantiateInitialViewController];
self.view.window.rootViewController = new;
person rdelmar    schedule 01.12.2013
comment
Я предполагаю, что мне следует поместить этот код в IBAction исходного VC? - person Mat; 01.12.2013
comment
Извините, я также предполагаю, что я изменил «SomeOtherStoryboard» на имя моей новой раскадровки, но я также изменю «storyboardWithName» на имя моей существующей раскадровки? - person Mat; 01.12.2013
comment
@Mat, да, это должно быть имя вашего файла раскадровки (без суффикса .storyboard). - person rdelmar; 01.12.2013
comment
Я продолжаю получать семантические проблемы. Я создал новую раскадровку под названием «Second.storyboard». Затем я настроил IBAction в файле ViewController.m с помощью кнопки на VC main.storyboard. В IBAction я вставил приведенный выше код, а затем изменил «SomeOtherStoryboard» на «Second». Когда я запускаю приложение, я получаю ряд семантических проблем: использование необъявленных идентификаторов «Второй», «sb», «Новый контроллер», «Новый», «sb», «новый». - person Mat; 02.12.2013
comment
@ Мэт, прости, Мэт, я ввел тебя в заблуждение. sb нужно вводить в UIStoryboard, только имя должно быть Second. NewController должно быть именем класса первого контроллера во второй раскадровке. - person rdelmar; 02.12.2013