iOS开发(Swift):创建UINavigationView的三种方法

摘要:
,表示window值我们会赋值。然后创建一个根视图控制器rootViewController,一个导航控制器navigationController。)-˃Bool{//Overridepointforcustomizationafterapplicationlaunch.window=UIWindowwindow.makeKeyAndVisible()rootViewController=UIViewController()navigationController=UINavigationControllerwindow.rootViewController=rootViewControllerwindow.addSubviewreturntrue}在application:didFinishLaunchingWithOptions:函数中初始化以上三个变量,将window设置为活动窗口并可见,使用rootViewController创建navigationController,把navigationController的视图添加到window中。见到如图上部分的导航条即表示成功创建NavigationController。由于该rootViewController通过rootViewController=UIViewController()初始化,所以该界面一片漆黑,接下来我们把初始化rootViewController的语句改改。下次我们将为NavigationController添加更多内容,让他们能在不同视图跳转,但是现在我们继续看看另一种创建NavigationController的方法。

UINavigationController是iOS开发中很常用的一种组件,由于种种原因许多人喜欢从代码创建视图控件,包括UINavigationController,但是有时候我们的屏幕控件太多,一方面使用storyboard可以方便设计,但是另一方面又需要用代码创建UINavigationController来灵活控制程序运行,下面将分别介绍代码,IB和两者结合创建一个UINavigationController的方法:

1.代码创建UINavigationController

新建一个SingleView项目,将AppDelegate.swift文件中application:didFinishLaunchingWithOptions:方法修改如下,注意原来的window为optional类型,为了方便可以改为var window: UIWindow!,表示window值我们会赋值。然后创建一个根视图控制器rootViewController,一个导航控制器navigationController。

    var window: UIWindow!
    var rootViewController: UIViewController!
    var navigationController: UINavigationController!


    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Override point for customization after application launch.
        
        window = UIWindow(frame: UIScreen().bounds)
        window.makeKeyAndVisible()
        
        rootViewController = UIViewController()
        navigationController = UINavigationController(rootViewController: rootViewController)
        
        window.rootViewController = rootViewController
        window.addSubview(navigationController.view)
        
        return true
    }
application:didFinishLaunchingWithOptions:函数中初始化以上三个变量,将window设置为活动窗口并可见,使用rootViewController创建navigationController,把navigationController的视图添加到window中。

到此,运行程序可见到如下界面。见到如图上部分的导航条即表示成功创建NavigationController。

由于该rootViewController通过rootViewController = UIViewController()初始化,所以该界面一片漆黑,接下来我们把初始化rootViewController的语句改改。

在新建项目时,Xcode生成了一个ViewController类,我们可以使用该类来初始化,把上面rootViewController = UIViewController()改成rootViewController= ViewController(),然后到ViewController类中,将viewDidLoad函数修改如下:

    override func viewDidLoad() {
        super.viewDidLoad()

        self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "下一个", style: UIBarButtonItemStyle.Plain, target: self, action: "next:")
    }
并添加一个函数如下

    func next(sender: AnyObject) {
        println("跳转")
    }
再次运行程序,应该可以看到控制台打印 跳转 两个字,能够执行next函数,意味着可以进行视图跳转。下次我们将为NavigationController添加更多内容,让他们能在不同视图跳转,但是现在我们继续看看另一种创建NavigationController的方法。

2.IB创建UINavigationController

IB创建UINavigationController确实也是很方便,新建一个SingleView App,打开Main.storyboard,点击菜单Editor->Embed In->Navigation Controller,即可完成,界面如下

iOS开发(Swift):创建UINavigationView的三种方法第1张

这样,一个NavigationController就创建好了,那么要实现跳转,首先当然要有按钮,到Object库中拖一个Bar Button Item到上图右侧的导航栏处

iOS开发(Swift):创建UINavigationView的三种方法第2张

iOS开发(Swift):创建UINavigationView的三种方法第3张

iOS开发(Swift):创建UINavigationView的三种方法第4张

iOS开发(Swift):创建UINavigationView的三种方法第5张

到此通过IB创建NavigationController也实现了。接下来就是两者结合的时候了。

3.通过代码连接Storyboard创建NavigationController。

首先创建一个SingleView App,打开storyboard,随便设计布局,接下来我们将连接该storyboard。

由于代码中需要引用,因此同样到AppDelegate中添加以下三个变量

    var window: UIWindow!
    var rootViewController: UIViewController!
    var navigationController: UINavigationController!

但是在application:didFinishLaunchingWithOptions函数中我们将使用storyboard来创建rootViewController,修改application:didFinishLaunchingWithOptions函数如下:

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        
        window = UIWindow(frame: UIScreen.mainScreen().bounds)
        window.makeKeyAndVisible()
        
        var storyboard = UIStoryboard(name: "Main", bundle: nil)
        rootViewController = storyboard.instantiateViewControllerWithIdentifier("MyViewController")
        
        navigationController = UINavigationController(rootViewController: rootViewController)
        
        window.rootViewController = rootViewController
        window.addSubview(navigationController.view)
        
        
        return true
    }
同样我们初始化window,navigationController,但是rootViewController我们是使用storyboard来初始化的,

var storyboard = UIStoryboard(name: "Main", bundle: nil) 首先根据名字Main获得storyboard的引用,

rootViewController = storyboard.instantiateViewControllerWithIdentifier("MyViewController") 然后从storyboard根据Identifier实例化rootViewController,既然要根据Identifier,因此我们回到storyboard文件为其添加ID。

打卡storyboard文件,点击界面空白处或点击上面三个图标的最左边,选择View Controller

iOS开发(Swift):创建UINavigationView的三种方法第6张

打开Inspector,添加Storyboard ID:MyViewController

iOS开发(Swift):创建UINavigationView的三种方法第7张

到此,通过storyboard设计界面,代码连接创建NavigationController就完成了,下一次我们将为NavigationController添加更多的内容以及实现真实的跳转。

免责声明:文章转载自《iOS开发(Swift):创建UINavigationView的三种方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇git:将两个请求合并为一个请求[转载]su认证失败下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

DPDK设备驱动的匹配和初始化

前言:DPDK使用了UIO(用户空间I/O)的机制,跳过内核态的网卡驱动,转而使用用户态的收发包驱动,从驱动到内存和数据包,继而到数据包的处理,这是一个完整的收发包流程。这篇主要介绍设备驱动的初始化,和收发包的处理。所选代码以DPDK-17.02版本为依据。 数据包的驱动初始化是在rte_eal_init()进行的,总体上分为2个阶段进行。 1.第一阶...

Node.js连接RabbitMQ,断线重连,动态绑定routing key

RabbitMQ官方提供的教程https://www.rabbitmq.com/tuto...,是基于回调的。 下面将给出基于Promise式的写法。并且实现动态的队列绑定 初始化配置 const amqp = require('amqplib') // rabbitMQ地址 const {amqpAddrHost} = require('../conf...

Delphi初始化与结束化

unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) procedure FormCreate(Sender:...

iOS开发证书和配置文件的使用

提示:之前只是根据网上的流程完成了iOS项目的发布过程,对于证书和配置文件仍是一头雾水,这里参照别人的文章,简单了解一下,毕竟以后用的着。 这里有几个问题: 什么是iOS证书,它是如何与app应用关联的? iOS开发证书和生产证书有何区别,如何使用的? 证书与配置文件(Provisioning Profiles)是什么关系,配置文件在Xcode中如何使用...

【iOS】Swift LAZY 修饰符和 LAZY 方法

延时加载或者说延时初始化是很常用的优化方法,在构建和生成新的对象的时候,内存分配会在运行时耗费不少时间,如果有一些对象的属性和内容非常复杂的话,这个时间更是不可忽略。另外,有些情况下我们并不会立即用到一个对象的所有属性,而默认情况下初始化时,那些在特定环境下不被使用的存储属性,也一样要被初始化和赋值,也是一种浪费。 在其他语言 (包括 Objectiv...

推荐:Java性能优化系列集锦

Java性能问题一直困扰着广大程序员,由于平台复杂性,要定位问题,找出其根源确实很难。随着10多年Java平台的改进以及新出现的多核多处理器,Java软件的性能和扩展性已经今非昔比了。现代JVM持续演进,内建了更为成熟的优化技术、运行时技术和垃圾收集器。与此同时,底层的硬件平台和操作系统也在演化。 目录: 一、Java性能优化系列之一--设计优化 二、J...