0

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

Мои AppDelegate (didFinishLaunching) в основном устанавливает мое окно и вызывает RootViewController:

 
// create our window 
UIWindow *window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
[window setBackgroundColor:[UIColor blackColor]]; 

// create our rootviewcontroller 
RootViewController *controller = [[RootViewController alloc] init]; 

// add our rootviewcontroller's view to our window 
[window addSubview:controller.view]; 

// controller is now owned by window's view 
[controller release]; 

// show us to the world 
[window makeKeyAndVisible]; 

Когда я добавляю controller.view, как подвид окна, я понимаю, что loadView RootVC будет автоматически вызываться.

В RootVC loadView я создаю tabBarController, каждая вкладка имеет navigationController и свой собственный viewController. Все работает нормально.

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

Я хотел бы, чтобы как можно больше кода из метода viewDidLoad в RootVC, и в идеале могли бы сделать то, что я хочу с этим:

 
WelcomeViewController *welcome = [[WelcomeViewController alloc] init]; 
[self presentModalViewController:welcome animated:true]; 
[welcome release]; 

Очевидно, что это не работает. Загрузка LoadVC еще не запущена, потому что я явно не задал свойство view. Я играл с кучей различных решений (welcome.view - [[UIView ....], используя метод init для WelcomeVC для установки self.view), но я просто не могу показаться, что этот модальный всплывает.

Как я должен выполнить то, что я ищу? Каковы наилучшие методы, и какое лучшее решение - держать мой код плотным и аккуратным?

Я застрял, поэтому, надеюсь, ваше решение позволит мне продолжить разработку моего приложения!

+0

Не связано с вашим вопросом, я не думаю, что [window addSubview: controller.view] сохранит контроллер вида. – MHC

+0

@MHC - Вы можете уточнить? Почему вы так думаете? Я думал, что всякий раз, когда представление добавляет subview, этот субвью сохраняется. – djibouti33

+0

Подводка сохраняется, но не является ее контроллером. – MHC

ответ

1

Хотя проблема не так проста, решение есть. Вам нужно подождать, пока не появится главное представление. Поэтому проверьте состояние и представите свой модальный вид в методе viewDidAppear, а не в методе viewDidLoad.

+0

Оказывается, в моем коде были другие проблемы, но ваше решение было тем, что мне нужно было исправить, и это сработало! Любая идея, почему вам приходится ждать появления основного вида, а не просто загрузки? Это указано в любой документации? – djibouti33

+0

Это «вид», заявленный в документе Apple, в котором используется метод «presentModal ...» в «контроллере текущего представления». Но, насколько я знаю, «контроллер текущего вида» не определен нигде. Однако, думая о его поведении (представленное в режиме просмотра представление является вершиной представления), представление представления, вероятно, работает с надписью собственного представления. Поэтому его собственное представление должно быть правильно вставлено в иерархию представлений, прежде чем оно сможет представить другой контроллер представления по модулю. – MHC

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