本文共 1686 字,大约阅读时间需要 5 分钟。
在IOS应用中,可以采用结构化程度更高的场景进行布局,其中有两种最流行的应用程序布局方式,分别是使用导航栏控制器和选项卡栏控制器。导航控制器能够让用户从一个屏幕切换到另一个屏幕,这样可以显示更多细节。选项卡栏控制器常用于开发包含多个屏幕的应用程序,其中每个选项卡都显示一个不同的场景,让用户能够与一组控件交互。
之前我们已经用了很多次的使用了导航控制器UIViewController,它的主要功能是控制屏幕的切换,提供一个显示用的view界面,同时包含view的加载、卸载事件的重定义功能。在IOS应用中,导航控制器(UINavigatinoController)可以管理一系列显示层次型信息的场景。也就是第一个场景显示关于特定场景的高级视图,第二个场景用于进一步描述,第三个场景再进一步描述,以此类推。通过导航管理器可以管理这种场景间的过渡,它会创建一个视图控制器“栈”,栈底是根视图控制器。当程序需要在多个view之间切换的时候,可以使用UINavigationController。这一话我们要添加一个导航栏,添加导航控制器需要在初始化的时候添加。打开类AppDelegate,会看到一个叫application的方法。看到方法体中的注释如下:
// Override point for customization after application launch.
在其中添加一个导航,代码如下:func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { let navController = UINavigationController(rootViewController: ViewController()) self.window?.rootViewController = navController self.window?.makeKeyAndVisible() //设置可见 return true }
运行效果如下:
上面的红框区域就是一个导航栏,有一点需要注意,我们在创建NavigationController时的参数为rootViewController:ViewController(),ViewController保留了我们之前设置的tableView的全部设计,笔者之前没注意,在写rootViewController类型的时候写成了UIViewController,结果运行后除了导航栏其他全是黑的,所以大家一定要注意。
导航栏中都是使用导航项(UINavigationItem)实例来填充的,默认情况下场景的导航项包含一个标题和一个back按钮。我们需要在ViewController中定义UINavigationItem的内容,现在我想给我这个View取个名字叫“cgGo”,在ViewController中的viewDidLoad方法中增加如下代码:
self.navigationItem.title = "cgGo"运行结果如图:
现在来试一下点击某一行跳转到下一个页面,定义一个控制器,新建文件,类型还是cocoa touch class,命名为DetailViewController。在点击的代理方法中,把之前跳出的ActionSheet的代码注释掉,改成如下代码:
self.navigationController?.pushViewController(DetailViewController(), animated: true)运行后点击屏幕划出一个新的界面:
我们看到的这个黑色屏幕就是DetailViewController,在这个类中进行编辑,就可以得到我们想要的结果,这就要求两个页面间要传参数,下一话再来解决这个问题。