UINavigationController

1.当要切换的各个屏幕之间没有相互依存的关系时,UITabBarController对象可以很好地完成任务。
2.但是当多个屏幕互有关联时,就要使用UINavigationController对象

当某个应用通过UINavigationController对象显示多个屏幕的信息时,相应的UINavigationController对象会以栈的形式保存所有屏幕的信息。这里的栈是一个数组对象,保存的都是UIViewController对象。一个UIViewController对象的视图对应一个屏幕。只有位于栈顶的UIViewController对象,其视图才是可见的。

初始化UINavigationController对象时,需要传入一个UIViewController对象。这个UIViewController对象将成为UINavigationController对象的根视图控制器(rootviewcontroller),且根视图控制器将永远位于栈底。应用可以在运行时向UINavigationController的栈压入更多的视图控制器。

UINavigationController对象的栈

UINavigationController是UIViewController的子类,所以UINavigationController对象也有自己的视图。该对象的视图有两个子视图:一个是UINavigationBar对象,另一个是topViewController的视图。

Homepwner应用对象图

针对XIB文件中的每一个UITextField对象,将其delegate属性关联至File'sOwner(按住Control,从UITextField对象拖曳至File'sOwner,然后选择弹出菜单中的delegate)

凡是加入了某个UINavigationController对象的栈的视图控制器,都可以向自己发送navigationController消息,以得到指向该对象的指针。

UINavigationController对象的根视图控制器对象,一直停留在栈中,总能得到指向相应UINavigationController对象的指针。
使用UINavigationController对象时,经常会由当前处于栈顶的视图控制器来负责压入另一个视图控制器,这是常见的使用模式。

视图控制器之间的数据传递

当要在多个视图控制器之间传递数据时,很多刚接触iOS开发的初学者可能会无从下手。Homepwner使用了一种简单高效的解决方案:由根视图控制器保存所有的数据,然后将数据的子集传给下一个视图控制器。

当某个视图收到endEditing:消息时,如果该视图(或者其下的任何子视图)是当前的第一响应对象,就会取消自己的第一响应对象状态,而且虚拟键盘也会关闭(传入的参数代表是否需要强制取消第一响应对象状态。某些第一响应对象可能会拒绝退出状态,传入YES可以强制其退出)。

//刷新tableview 数据
[self.tableView reloadData];

UIViewController对象有一个名为navigationItem的属性,类型为UINavigationItem。和UINavigationBar不同,UINavigationItem不是UIView的子类,不能在屏幕上显示。UINavigationItem对象的作用是为UINavigationBar对象提供绘图所需的内容。当某个UIViewController对象成为UINavigationController的栈顶对象时,UINavigationBar对象就会访问该UIViewController对象的navigationItem,获取和界面显示有关的内容。
 UINavigationItem对象默认是“空”的。要让UINavigationBar对象能够显示最基本的信息,可以为UINavigationItem对象设置一个简单的标题(title属性)。当应用将某个UIViewController对象移至UINavigationController对象的栈顶时,UINavigationBar对象就会访问UIViewController对象的navigationItem属性,查看相应的title属性是否指向有效的NSString对象。如果是,就会在UINavigationBar对象的正中显示该字符串


UINavigationItem
设置了各种界面属性的UINavigationItem对象

类似于UINavigationItem,UIBarButtonItem也不是UIView的子类。UINavigationItem对象封装了一些设置信息,以便UINavigationBar在运行时可以正确显示该对象。同样,UIBarButtonItem对象封装了关于如何在UINavigationBar显示单个按钮的信息,UINavigationBar对象会根据UIBarButtonItem对象中的信息显示相应的按钮。(UIToolbar与UINavigationBar一样,也是通过UIBarButtonItem对象来显示按钮的。)
除了leftBarButtonItem和rightBarButtonItem,UIBarButtonItem对象的第三个界面属性是titleView。UINavigationBar对象包含两种标题显示模式。第一种模式是前面介绍过的:显示一个简单的字符串。第二种模式是在UINavigationBar对象正中显示一个视图。两种模式不能共存。如果需要在UINavigationBar对象正中显示复杂的界面,就可以先创建拥有自定义视图(例如UIButton对象、UISlider对象、UIImageView对象甚至MKMapView对象)的视图控制器,然后为该对象的titleView赋值,并指向这个自定义视图。上面的图中的UINavigationItem对象为例,该对象的titleView属性指向的就是一个自定义视图。通常情况下,使用第一种模式就可以了。

navItem.leftBarButtonItem=self.editButtonItem;

只需编写一行代码,向BNRItemsViewController对象发送editButtonItem消息,就能得到可以加入UINavigationBar对象的Edit(编辑)按钮。构建并运行应用,点击“编辑”按钮,UITableView对象会进入编辑模式。UIViewController对象有一个名为editButtonItem的属性,当该对象收到editButtonItem消息后,如果editButtonItem属性的值是nil,就会创建一个标题为“编辑”的UIBarButtonItem对象。此外,editButtonItem方法所返回的UIBarButtonItem对象默认已经设置好了目标动作对。当用户点击对应的按钮时,包含该对象的UIViewController对象就会收到setEditing:animated:消息。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,451评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,172评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,782评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,709评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,733评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,578评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,320评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,241评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,686评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,878评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,992评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,715评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,336评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,912评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,040评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,173评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,947评论 2 355

推荐阅读更多精彩内容