现在的位置: 首页 > 综合 > 正文

iphone开发导航控制器的使用

2018年07月15日 ⁄ 综合 ⁄ 共 3352字 ⁄ 字号 评论关闭

一. 导航控制器总述:

 

              UINavigationController是用于构建分层应用程序的主要工具,主要采用栈形式来实现视图。任何类型的视图控制器都可放入栈中。在设计导航控制器时需要指定根视图即用户看到的第一个视图。根视图控制器是被导航控制器推入到栈中的第一个视图控制器。当用户查看下一个试图时,栈中将加入一个新的视图控制器,它所控制的视图将展示给用户。我们可以通过导航按钮来操作分层的应用程序,用它来控制视图的推入或推出。

 

 

二. 构建导航应用程序的骨架:

 

            Xcode已经提供了导航应用程序的模板。但我们还是从零开始创建一个导航的应用程序以便更好的理解导航是如何构成及工作的。当然你也可以直接使用Xcode提供好的模板

 

            1. 创建一个基于Windows-Based Application (注:Xcode 4.2.1是创建一个Empty Application 这个模板创建好之后没有mainWindow.xib 它在代码中创建了一个window不知道apple公司为什么要这样做?难道是鼓励大家少用xib? 呵呵。不过我们可以手动添加一个mainWindow.xib。

 

            2. 创建一个视图控制器用于显示根视图。这里你可以显示任何你想显示的内容。我们仅以FirstLevelViewController作为例子。(你需要在这个类中填充你想显示的内容)

 

             3. 设置导航控制器

 

                  a. 在程序的AppDelegate.h中加入UINavigationController *navController并添加输出口。

 

                       b.在.m文件中申明属性后在didFinishLaunchingWithOption函数中将控制器加入windows视图,代码如下:        [window addSubview:navController.view];

 

          c. 托一个NavigationController控件到mainWindow.xib

 

                  d. 按下control键从Nav App Delegate图标拖到新的NavigationController图标选择navController输出口

 

                  e. 指定根视图:选中Navigation Controller目录下的Root ViewController,按下cmd+4键打开身份检查器将基类改为我们刚才创建的FirstLevelViewController类。如果你的FirstLevelViewController类已经填充完毕我们就可以开始运行程序了。

 

 

                  看一下,运行程序是不是我们所期望的那样???

 

 

三. 构建导航按钮:

 

               导航应用程序中经常应用导航按钮来控制视图的推入推出,这种设计模式可以反复的构建复杂的分层应用程序,那么导航按钮是如何实现的呢?

 

 

              上图中的Back按钮和Next按钮就是导航按钮我们可以通过UIBarButtonItem来设置导航按钮,例如下面的代码就是我们在导航的工具条上创建了两个按钮,一个back按钮一个next按钮:

 

//设置导航按钮

    UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:self action:@selector(backButtonPressd)];

    //第一个参数为按钮标题

    //第二个参数是按钮样式

    //第三个参数接受消息的对象

    //第四个参数是按钮的回调函数

   

   

    [[self navigationItem] setLeftBarButtonItem:backButton];

    //设置为左边按钮

   

    //释放按钮

    [backButton release];

   

    //设置导航按钮

    UIBarButtonItem *rootButton = [[UIBarButtonItem alloc] initWithTitle:@"Root" style:UIBarButtonItemStyleBordered target:self action:@selector(rootButtonPressd)];

    //第一个参数为按钮标题

    //第二个参数是按钮样式

    //第三个参数接受消息的对象

    //第四个参数是按钮的回调函数

   

    [[self navigationItem] setRightBarButtonItem:rootButton];

    //设置为右边按钮

   

    //释放按钮

    [rootButton release];

 

             这段代码应该很容易理解,我们创建了一个导航按钮,设置了标题,按钮风格和按钮的回调函数,然后setLeftBarButtonItem 是将它设置为左边按钮相应的setRightBarButtonItem是设置为右边按钮

 

 

四. 导航控制器视图的推入推出:

 

            那么导航控制器是如何推入一个试图或者如何推出一个试图的呢?

             它是通过navigationController的pushViewController: animated:函数实现的。看下面这段代码:

 

//创建新的试图并将试图推入栈中

    SecondLevelViewController*secondController = [[SecondLevelViewController alloc]initWithNibName:@"SecondLevelViewController" bundle:nil];

    UINavigationController  *theNavController = [[UINavigationController alloc]

                                                initWithRootViewController:secondController];

    [secondControllerrelease];

   theNavController.navigationBar.tintColor =[UIColor blackColor];

    [self.navigationController pushViewController:secondController animated:YES];

    [theNavController release];

 

 

我们创建了一个试图并把他加入Nav最后通过pushViewController把它放入栈中此时SecondLevelViewController所控制的视图也会出现在用户眼中,下面就是我们新弹出的视图:

 

那么如何推出视图呢?相信你一定已经猜到了,push相对应的便是pop,popViewControllerAnimated将当前的视图控制器推出了栈,还有一种是我们在进行了很多视图之后想直接返回到根试图,它也一样很容易实现popToRootViewControllerAnimated就可以帮我们直接到达栈的最底层也就是根视图,在下图的Root按钮中我们直接调用[self.navigationController popToRootViewControllerAnimated:YES];就可以回到根试图了

 

详细代码请查阅Nav demo地址:http://download.csdn.net/detail/decemberd/3920630

转自:http://blog.csdn.net/decemberd/article/details/7071110

抱歉!评论已关闭.