热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

NavigationController的使用及下一级页面标题的设置

1.创建通过xib创建通过代码创建一个UINavigationcontroller包括navigation


1.创建

通过xib创建

通过代码创建

一个UINavigationcontroller包括 navigation bar,可选的navigation toolbar,RootViewController.

2.导航栈

有四个方法

  • – pushViewController:animated:
  • – popViewControllerAnimated:
  • – popToRootViewControllerAnimated:
  • – popToViewController:animated:
  • 例如,想推进一个新的viewcontroller,到导航栈中,代码:
- (void)tableView:(UITableView *)tableView
        didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    [[tableView cellForRowAtIndexPath:indexPath] setSelected:NO animated:YES];//1.
 
    DetailsViewController *detailsViewController = [[DetailsViewController alloc]
        initWithNibName:@"DetailsViewController" bundle:nil];
    [self.navigationController pushViewController:detailsViewController];
    [detailsViewController release];
}
  • 这里有两个需要注意的地方
  • 1.进入下一个页面的时候,table中的选择行要取消。
  • 2.记得release要push的controller.因为导航栈是retain的。

3.配置Navigation bar

可能大家想直接访问navigationcontroller 的navigation bar。但是通常我们不这样做。而是维护每个viewcontroller的 navigation item。

这里不要将navigation item 与 navigation bar 混淆,navigation item不是UIView的子类。它是一个用来更新navigtion bar的存储信息的类。

还是上代码说明:

- (void)tableView:(UITableView *)tableView
        didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
  [[tableView cellForRowAtIndexPath:indexPath] setSelected:NO animated:YES];
 
  Person *person;
 
  // Some code that sets person based on the particular cell that was selected
 
  DetailsViewController *detailsViewController = [[DetailsViewController alloc]
    initWithNibName:@"DetailsViewController" bundle:nil];
  detailsViewController.navigationItem.title = person.name;
  [self.navigationController pushViewController:detailsViewController];
  [detailsViewController release];
}
detailsViewController.navigationItem.title = person.name;这句话的意思就是把二级界面的导航标题设置成person.name

要注意两点:1.我们并没有直接操作navigation bar 2.在push 新的controller之前设置标题(在新的view之中也可以设置)

当新的detailcontroller被push后,UINavigationController会自动更新navigation bar。

4.返回按钮

默认情况下,当你将一个新的viewcontroller推入栈的时候,返回按钮将显示前一个页面的controller的 navigation item的title。

如果想定制返回按钮的标题还有事件的话,可以用以下代码。

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back"
      style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = backButton;
[backButton release];

注意,这里的self是第一级的view controller。这样的话第二级的页面将显示“Back”

 

ps:最新发现, self.navigationItem.leftBarButtonItem 可以设置当前页面的左侧的按钮。这个需要再当前页面实现,而不是上一级页面。

5.左右按钮

navigation item还有两个属性leftBarButtonItem rightBarButtonItem。

一般leftBarButtonItem只出现在RootviewController中使用,因为其他页面一般都显示一个返回按钮。

UIBarButtonItem *settingsButton = [[UIBarButtonItem alloc] initWithTitle:@"Settings"
      style:UIBarButtonItemStylePlain target:self action:@selector(handleSettings)];
self.navigationItem.rightBarButtonItem = settingsButton;
[settingsButton release];

这会在右侧添加一个“Setting”的按钮,并触发handleSetting事件。

6.在首页隐藏Navigation Bar
在RootViewController.m中实现如下:
 
   
- (void)viewWillAppear:(BOOL)animated {
	[super viewWillAppear:animated];
 
	[self.navigationController setNavigationBarHidden:YES animated:YES];
}
 
- (void)viewWillDisappear:(BOOL)animated {
	[super viewWillDisappear:animated];
 
	[self.navigationController setNavigationBarHidden:NO animated:YES];
}

这篇文章翻译自http://www.iosdevnotes.com/2011/03/uinavigationcontroller-tutorial/


推荐阅读
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • iOS Swift中如何实现自动登录?
    本文介绍了在iOS Swift中如何实现自动登录的方法,包括使用故事板、SWRevealViewController等技术,以及解决用户注销后重新登录自动跳转到主页的问题。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 本文介绍了在Vue项目中如何结合Element UI解决连续上传多张图片及图片编辑的问题。作者强调了在编码前要明确需求和所需要的结果,并详细描述了自己的代码实现过程。 ... [详细]
  • 本文详细介绍了MySQL表分区的创建、增加和删除方法,包括查看分区数据量和全库数据量的方法。欢迎大家阅读并给予点评。 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • 李逍遥寻找仙药的迷阵之旅
    本文讲述了少年李逍遥为了救治婶婶的病情,前往仙灵岛寻找仙药的故事。他需要穿越一个由M×N个方格组成的迷阵,有些方格内有怪物,有些方格是安全的。李逍遥需要避开有怪物的方格,并经过最少的方格,找到仙药。在寻找的过程中,他还会遇到神秘人物。本文提供了一个迷阵样例及李逍遥找到仙药的路线。 ... [详细]
  • ScrollView嵌套Collectionview无痕衔接四向滚动,支持自定义TitleView
    本文介绍了如何实现ScrollView嵌套Collectionview无痕衔接四向滚动,并支持自定义TitleView。通过使用MainScrollView作为最底层,headView作为上部分,TitleView作为中间部分,Collectionview作为下面部分,实现了滚动效果。同时还介绍了使用runtime拦截_notifyDidScroll方法来实现滚动代理的方法。具体实现代码可以在github地址中找到。 ... [详细]
  • 本文介绍了在iOS开发中使用UITextField实现字符限制的方法,包括利用代理方法和使用BNTextField-Limit库的实现策略。通过这些方法,开发者可以方便地限制UITextField的字符个数和输入规则。 ... [详细]
  • MVC设计模式的介绍和演化过程
    本文介绍了MVC设计模式的基本概念和原理,以及在实际项目中的演化过程。通过分离视图、模型和控制器,实现了代码的解耦和重用,提高了项目的可维护性和可扩展性。详细讲解了分离视图、分离模型和分离控制器的具体步骤和规则,以及它们在项目中的应用。同时,还介绍了基础模型的封装和控制器的命名规则。该文章适合对MVC设计模式感兴趣的读者阅读和学习。 ... [详细]
  • 本文介绍了MVP架构模式及其在国庆技术博客中的应用。MVP架构模式是一种演变自MVC架构的新模式,其中View和Model之间的通信通过Presenter进行。相比MVC架构,MVP架构将交互逻辑放在Presenter内部,而View直接从Model中读取数据而不是通过Controller。本文还探讨了MVP架构在国庆技术博客中的具体应用。 ... [详细]
author-avatar
大爱小哇先森_991
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有