Непонятно, как именно вы хотите, чтобы эти контроллеры представления были связаны друг с другом.Например, вы можете по очереди помещать каждый из них в стек контроллера навигации, чтобы у пользователя всегда была возможность вернуться назад к предыдущим контроллерам представления.Либо у вас может быть требование, согласно которому пользователь должен последовательно проходить пять контроллеров без возможности вернуться назад, и в этом случае вы, вероятно, установите свойство rootViewController окна для каждого контроллера, когда придет время.Ваше решение будет определять, как вы пишете код, который представляет представление каждого контроллера.Прочитайте View Руководство по программированию контроллера для получения подробной информации.
Конструкция, которую вы описываете выше, имеет каждый контроллер представления, который решает, какой контроллер представления представить следующим.Это часто уместно, особенно когда контроллеры представления образуют иерархию.Из вашего описания, тем не менее, кажется, что было бы полезно сконцентрировать все знания о последовательности, в которой контроллеры представлены в одном объекте.Сделайте этот объект делегатом каждого контроллера, и пусть этот объект (возможно, делегат приложения) определит порядок контроллеров.В качестве (непроверенного) примера вы можете добавить это к своему делегату приложения:
-(void)application:(UIApplication*)app didFinishLaunchingWithOptions:(NSDictionary*)options
{
//...
self.controllers = [NSArray arrayWithObjects:
[[[ViewControllerA alloc] initWithNibName:nil bundle:nil] autorelease],
[[[ViewControllerB alloc] initWithNibName:nil bundle:nil] autorelease],
//...
[[[ViewControllerN alloc] initWithNibName:nil bundle:nil] autorelease]];
// Make self the delegate for each of the view controllers.
[self.controllers setValue:self forKey:@"delegate"];
[self.navigationController pushViewController:[self.controllers objectAtIndex:0] animated:NO];
}
-(void)viewControllerDidFinish:(UIViewController*)controller
{
NSUInteger index = [self.controllers indexOfObject:controller];
NSUInteger nextIndex = index + 1;
if (nextIndex < [self.controllers count]) {
[self.navigationController pushViewController:[self.controllers objectAtIndex:nextIndex animated:YES];
}
}
Затем, когда контроллер представления готов переключиться на следующий контроллер, он может просто вызвать:
[self.delegate viewControllerDidFinish:self];
Опять же, идея заключается в том, что порядок контроллеров представления в массиве определяет порядок, в котором будут представлены контроллеры.Я использовал навигационный контроллер здесь, но вам не нужно.Кроме того, вы, вероятно, захотите объявить протокол с помощью метода -viewControllerDidFinish: (UIViewController *), принять этот протокол в делегате вашего приложения (или в зависимости от того, какой объект управляет контроллерами), и чтобы свойства делегата ваших контроллеров указывали этот протокол.Это позволит избежать любых предупреждений о том, что делегат не реализует метод.