2009-03-27 5 views
2

Я медленно подбираю Objective-C и iPhoneSDK, но у меня возникают проблемы с тем, чтобы получить голову вокруг шаблона MVC.UIViewController .... AppDelegate .... Где идет код!

Я создаю игру, которая, я надеюсь, будет иметь такие экраны, как заставка, заголовок, справка и т. Д. То, что я сейчас делаю, это создание нового UIViewController и нового nib для каждого из этих экранов, это правильная практика? В основном AppDelegate я создал методы, которые отображают представления и добавляют их с помощью [window addSubView: controller.view]. То, что я нахожу, заключается в том, что с кодом show/hide, сидящим в AppDelegate, мне нужно создать ссылку AppDelegate в загруженном контроллере, чтобы настроить код скрытия. Это кажется немного неудобным, но я ожидаю, что, вероятно, я ошибаюсь, как вы, ребята, обычно так делаете?

// example from AppDelegate 
-(IBAction)showHelp:(id)sender 
{ 
    helpScreen = [[helpController alloc] initWithNibName:@"helpView" bundle:nil]; 

    // send copy of self in order to target closeHelp method from InterfaceBuilder 
    helpScreen.appDel = self; 

    helpScreen.view.alpha = 0; 
    [window addSubview:helpScreen.view]; 

    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:1.0]; 
    helpScreen.view.alpha = 1.0; 
    [UIView commitAnimations]; 
} 

Большое спасибо,

ответ

0

Это кажется разумным мне. Я довольно новичок в Obj-C, но так я сделал приложение.

Пока ViewControllers не знают друг о друге, я думаю, что вы все прекрасно.

3

UIViewController и новый наконечник для каждого из этих экранов, это право практики

Yeap!

[окно addSubView: controller.view]

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

Что я вывод, что с показать код/​​скрыть сидел в AppDelegate, я должен создать ссылку из AppDelegate в загруженном контроллера , чтобы нацеливать код скрыть

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

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

  • pushView - временно выдвигает представление как активное, текущий вид удаляется из иерархии представлений, но не уничтожается. Это будет использоваться для чего-то вроде экрана справки.
  • popView - текущий вид разрушен, и предыдущий вид восстановлен. Вот как экран справки удалит себя.
  • changeView - текущий вид уничтожается и заменяется указанным представлением.Это может быть, как вы переходите со страницы 1 на страницу2 справки.

E.g.

// your root controller 
-(void) changeView:(UIViewController) newController 
{ 
    newController = blah blah; 
    newController.delegate = self; 

    // add newController view, remove old one etc 
} 

// new controller 
-(void) userPressedHelp 
{ 
    UIViewController* help = blah blah; 
    [self.delegate pushView: newController]; 
} 

// help controller 
-(void) userPressedOk 
{ 
    [self.delegate popView]; 
} 
Смежные вопросы