Да, вам понадобится UINavigationController, чтобы сделать pushViewController. Тем не менее, нет ни одного места, где вы должны определить его. Если каждый контроллер представления в вашем приложении является частью одного UINavigationController, то имеет смысл поместить его в делегат приложения. Однако вы можете в любое время выделить и использовать контроллер представления. (Обратите внимание, что это подкласс UIViewController.) Вы также можете иметь несколько UINavigationControllers в своем приложении (что обычно, например, если у вас есть панель вкладок). Таким образом, вы можете создавать UINavigationControllers в любое время.
Если вы ищете альтернативные способы представления других контроллеров представления, у вас есть несколько других вариантов. Например,
- (void)presentModalViewController:(UIViewController *)modalViewController animated:(BOOL)animated
позволит вам перейти от одного контроллера представления к другому контроллеру представления и может использоваться без UINavigationController. Но я думаю, что навигационный контроллер очень часто является лучшим способом перехода от одного контроллера представления к другому.