UIViewController .... AppDelegate .... Куда идет код! - PullRequest
2 голосов
/ 28 марта 2009

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

Я дорабатываю игру, которая, я надеюсь, будет иметь экраны, такие как заставка, заголовок, справка и т. Д. В настоящее время я занимаюсь созданием нового UIViewController и нового пера для каждого из этих экранов, это правильная практика? В главном 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];
}

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

Ответы [ 2 ]

3 голосов
/ 28 марта 2009

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

Yeap!

[окно addSubView: controller.view]

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

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

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

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

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

1033 * Е.Г. *

// 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];
}
0 голосов
/ 28 марта 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...