2011-09-20 106 views
2

我认为我的问题的答案是“是”,但我只是想从每个人的确认。是否需要执行pushViewController的UINavigationController?

我有一个UITableView应该“滑动”到另一个UIViewController当我选择一行。 我以前用其他应用程序完成此操作(并且它们包含UINavigationController,但在UITabView中)。

所以即时通讯想知道: 是否需要一个UINavigationController才能使用self.navigationController pushViewController?

如果是这样(我再次怀疑是真的),我必须在哪里定义UINavigationController? 在AppDelegate中?在主/主UIViewController?

+0

要推送viewController YES,您需要将该消息发送给UINavigationController;如果你需要推送viewControllers,你需要一个基于导航的应用程序,它有一个UINavigationController,你可以添加你想要的任何东西(一个viewController作为navController,UITableView或任何其他视图的根) –

回答

3

简短的回答是:是的。

UINavigationController的设计目的是在屏幕上或屏幕外管理和动画一堆视图控制器(与其他一些界面元素(如导航栏或工具栏)结合使用)。传统上,UINavigationControllers被App Delegate强力拥有并初始化,因为它们被认为是最重要的根对象。呈现出UINavigationController的正确使用的示例类可能是这样的:

#import <UIKit/UIKit.h> 

@interface CFIExampleAppDelegate : NSResponder <UIApplicationDelegate> 

@property (nonatomic, strong) UIWindow *window; 
@property (nonatomic, strong) UINavigationController *navigationController; 

@end 

@implementation CFIExampleAppDelegate 

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    self.window = [[UIWindow alloc]initWithFrame:UIScreen.mainScreen.bounds]; 
    self.navigationController = [[UINavigationController alloc]initWithRootViewController:/*Some Controller Instance*/]; 
    self.window.rootViewController = self.navigationController; 
    [self.window makeKeyAndVisible]; 

    return YES; 
} 

@end 

长的答案,一如既往,是

的UINavigationController可以平凡重新实现(和它有很多次)效果很好。就像UIViewController的子类一样简单,并且在某种堆栈上(如NSMutableArray)一样。

+0

好的,谢谢。你有一个明确的例子(链接,代码片段)? – AlvinfromDiaspar

+0

我发现它:http://www.ralfebert.de/tutorials/iosdev/navigationcontroller/ – AlvinfromDiaspar

+0

祝你好运,无论你想做什么:) – CodaFi

4

是的,你需要有一个UINavigationController来执行pushViewController。但是,没有一个地方你必须必须定义它。如果整个应用程序中的每个视图控制器都是一个UINavigationController的一部分,那么将其放入App Delegate中是有意义的。但是,您可以随时分配和使用视图控制器。 (请注意,它是一个UIViewController子类。)您的应用程序中也可以有多个UINavigationController(这很常见,例如,如果您有一个Tab栏)。所以你可以随时创建UINavigationControllers。

如果您正在寻找目前其他视图控制器的替代方法,您确实有一些不同的选项。例如,

- (void)presentModalViewController:(UIViewController *)modalViewController animated:(BOOL)animated 

将允许你从一个视图控制器转换到另一个视图控制器,并且可以在不一个UINavigationController使用。但我认为导航控制器通常是从一个视图控制器移动到另一个视图控制器的最佳方式。

相关问题