简单的导航应用程序如何工作?

时间:2011-12-08 05:30:39

标签: iphone ios

我在http://gigaom.com/apple/iphone-dev-sessions-create-a-navigation-based-application/的帮助下创建了一个简单的导航应用。但我在下面给出的一行中几乎没有混淆。

[window addSubview:[navigationController view]];

- (void)applicationDidFinishLaunching:(UIApplication *)application
{
    // Override point for customization after application launch.
    // Add the navigation controller's view to the window and display.
    [window addSubview:[navigationController view]];
    [self.window makeKeyAndVisible];       
}

在我的Delegate.h中,我有。

UINavigationController *navigationController;

这里我们可以看到navigationController指向UINavigationController。我的整个困惑在下面。

[navigationController view]

这条线如何运作?也许它指向我的RootViewController.xib,如果是,那么它是怎么回事?

3 个答案:

答案 0 :(得分:1)

好的,所以当你创建一个导航控制器时,它只是控制器堆栈视图的一种手段。为了使用addSubview:(UIView *)实际向窗口添加视图,您必须使用[navigationController view]检索导航控制器的视图,该视图将获取给定导航控制器的视图,允许您在应用程序的主窗口。我希望这是有道理的。您应该考虑阅读Objective-c的一些介绍。

答案 1 :(得分:1)

导航控制器管理自包含的视图层次结构(称为导航界面),其内容部分由导航控制器直接管理的视图和部分由您提供的自定义视图控制器管理的视图组成。每个自定义视图控制器管理不同的视图层次结构,但导航控制器协调不同视图层次结构之间的导航。

当应用程序启动时,功能

- (void)applicationDidFinishLaunching:(UIApplication *)application

被调用。在此函数中,您可以添加应用程序窗口的子视图。它可能是你的viewController,tabBarController或navigationController(取决于你想要制作的应用程序的类型)。当

[window addSubview:[navigationController view]];

已编译。它添加了导航控制器附带的视图,它是基于导航的应用程序iphone中的rootViewController。

如果您想详细了解导航控制器的工作原理。检查此link

答案 2 :(得分:1)

问:这条线如何运作?
答:它会调度您的navigationController视图,[navigationController view] equeals navigationController.view
如果你使用nib文件启动NavigationController,它就会很清楚 在这里,我创建了一个文件:CustomNavigationController.xib,我的navigationController将把它作为视图加载:
   你可以看到navigationController的视图正确,它在顶部包含一个navigationBar 导航控制器与pushViewControllerpopViewController等协同工作,它可以加载&在图片中的灰色区域卸载viewController的视图。

问:或许它指向我的RootViewController.xib,如果是,那么它是怎么回事?
答:我不确定你的RootViewController.xib是什么。也许这是你的主视图控制器 [window addSubview:[navigationController view]];只是将您的navigationController视图添加到主窗口作为子视图 如果您的应用程序基于导航控制器,则可以将其设置为窗口的根视图控制器(如self.window.rootViewController = navigationController;方法application:didFinishLaunchingWithOptions:)。 一般来说,一个应用程序有一个窗口,但很多视图。 View Controller可以加载x / nib文件作为其视图。也许您需要阅读有关MVC(模型 - 视图 - 控制器)的更多信息。 :)