iOS学习之UINavigationController详解与使用(一)添加UIBarButtonItem

2023-05-16

1、UINavigationController导航控制器如何使用

UINavigationController可以翻译为导航控制器,在iOS里经常用到。

我们看看它的如何使用:

下面的图显示了导航控制器的流程。最左侧是根视图,当用户点击其中的General项时 ,General视图会滑入屏幕;当用户继续点击Auto-Lock项时,Auto-Lock视图将滑入屏幕。相应地,在对象管理上,导航控制器使用了导航堆栈。根视图控制器在堆栈最底层,接下来入栈的是General视图控制器和Auto-Lock视图控制器。可以调用pushViewControllerAnimated:方法将视图控制器推入栈顶,也可以调用popViewControllerAnimated:方法将视图控制器弹出堆栈。

上图来自苹果官网。


2、UINavigationController的结构组成

看下图,UINavigationController有Navigation bar ,Navigation View ,Navigation toobar等组成。


现在我们建立一个例子,看看如何使用UINavigationController

3、新建一个项目

命名为UINavigationControllerDemo,为了更好理解UINavigationController,我们选择Empty Application模板


4、创建一个View Controller,命名为RootViewController:依次选择File——New——New File,默认勾上With XIB for user interface.


选择正确位置创建完成,这时项目里多了三个文件,分别是RootViewController.hRootViewController.mRootViewController.xib文件。

打开RootViewController.xib,添加一个按钮控件,按钮Button改成 :Goto SecondView,为跳转做准备


5、打开AppDelegate.h,向其中添加属性:

@property (strong, nonatomic) UINavigationController *navController;

添加后AppDelegate.h文件代码如下:

#import <UIKit/UIKit.h>

@class ViewController;

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

@property (strong, nonatomic) ViewController *viewController;

@property (strong, nonatomic) UINavigationController *navController;

@end

6、在AppDelegate.m 文件的didFinishLaunchingWithOptions方法中创建添加navController,RootViewController视图。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    RootViewController *rootView = [[RootViewController alloc] init];
    rootView.title = @"Root View";
    
    self.navController = [[UINavigationController alloc] init];
    [self.navController pushViewController:rootView animated:YES];
    [self.window addSubview:self.navController.view];
    [self.window makeKeyAndVisible];
    return YES;
}
给rootView的titie命名为 Root View,好识别View直接的切换关系。用pushViewController把rootView加入到navController的视图栈中。

7、现在Root视图添加完成

看看效果:

'

现在还没有Navigation bar 。只有title。

8、添加UIBarButtonItem

bar ButtonItem分左右UIBarButtonItem。我们把左右的都添加上去。

在RootViewController.m中添加代码如下:

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIBarButtonItem *leftButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(selectLeftAction:)];
    self.navigationItem.leftBarButtonItem = leftButton;
    
    UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd  target:self action:@selector(selectRightAction:)];
    self.navigationItem.rightBarButtonItem = rightButton;

}

这样添加了UIBarButtonItem了,效果如下:



这里重点介绍下

UIBarButtonItem *leftButton = [[UIBarButtonItemalloc]initWithBarButtonSystemItem:UIBarButtonSystemItemActiontarget:selfaction:@selector(selectLeftAction:)];

UIBarButtonSystemItemAction的风格,这是系统自带的按钮风格,看下图,你不用一个个试验,你也知道想用那个item,如下图:


9、响应UIBarButtonItem的事件的实现

我们在action:@selector(selectLeftAction:);

action添加了selectLeftAction和selectRightAction

在RootViewController.m文件中添加代码实现:

-(void)selectLeftAction:(id)sender
{
    UIAlertView *alter = [[UIAlertView alloc] initWithTitle:@"提示" message:@"你点击了导航栏左按钮" delegate:self  cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
    [alter show];
}

-(void)selectRightAction:(id)sender
{
    UIAlertView *alter = [[UIAlertView alloc] initWithTitle:@"提示" message:@"你点击了导航栏右按钮" delegate:self  cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
    [alter show];
}
这样在点击左右的UIBarButtonItem时,弹出提示:



这篇先讲添加UIBarButtonItem,下篇讲解页面跳转和添加UISegmentedControl

下篇:iOS学习之UINavigationController详解与使用(二)页面切换和segmentedController


例子代码:https://github.com/schelling/YcDemo

著作权声明:本文由http://blog.csdn.net/totogo2010/原创,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS学习之UINavigationController详解与使用(一)添加UIBarButtonItem 的相关文章

  • linux-查看端口状态

    Linux如何查看端口状态 方法步族 xff1a 1 在Linux使用过程中 xff0c 需要了解当前系统开放了哪些端口 xff0c 并且要查看开放这些端口的具体进程和用户 xff0c 可以通过netstat命令进行简单查询 2 netst
  • (转载)C++中枚举与字符串相互转换

    有的时候我们喜欢使用一些外部的文件保存管理一些配置信息 xff0c 这些配置文件大多都是文本格式例如ini xff0c xml等 xff0c 这样方便编辑和管理 因此在使用的过程中必然会遇到各种字符串转换问题 最常见的便是将字符串的数字转换
  • INSERT INTO 表名 SELECT 语句

    Connected to Oracle Database 11g Enterprise Edition Release 11 2 0 1 0 Connected as scott CREATE TABLE 表名 AS SELECT 语句 S
  • Windows 去除快捷方式小箭头真正无任何副作用的方法!

    前几天写过 Windows7去除快捷方式小箭头后会导致左侧收藏夹中的桌面图标消失 xff0c 以为那种方法已经很完美 xff0c 然而我错了 xff0c 当我右击 计算机 想打开 管理 时 xff0c 弹出了错误提示 xff1a 该文件没有
  • 在 KDE 下不能正常使用 fcitx 以及翻页问题

    在 kde 下使用 fcitx 的时候 xff0c 不能在某些地方使用 xff0c 如kate xff0c 但有些地方可以使用 xff0c 如 chrome 使用 Ctrl 43 Space 时无法激活 Fcitx 1 检查你所输入的程序
  • IDM 激活

    打开 C WINDOWS system32 drivers etc 这个文件夹中有个 hosts 文件 大家用 记事本 打开 在最后一行加入 127 0 0 1 registeridm com 127 0 0 1 www registeri
  • Linux 挂载 exFat

    在Linux的学习中为方便大家学习了解更多的Linux方面的内容 xff0c 达内培训 技术小编本文将为大家详解关于Linux方面的技术内容 xff0c 提供给大家作为学习的参考 先说挂载exFAT格式的移动硬盘 xff0c 最近刚刚做了个
  • HTML中meta标签的作用

    HTML中meta标签的作用 首先 xff0c meta标签是一个自结束标签 xff0c 其格式为 lt meta gt xff0c 下面介绍meta标签的作用 xff1a 1 规定字符集 lt meta charset 61 34 utf
  • 多个浏览器窗口中间不同的Session

    关于多个窗口不同Session的作用就不说了 xff0c 直接说步骤 Firefox xff1a 编辑快捷方式的目标 xff0c 后面加上 p no remote Chrome xff1a 打开新的隐身窗口 IE xff1a 文件 gt 新
  • Nginx 开启对 PHP 的解析(转)

    安装 PHP 和 nginx 后 xff0c 无法解析 PHP 文件 其中 xff0c PHP 和 nginx 的编译安装 configure 如下 xff1a PHP 5 3 9 configure prefix 61 usr local
  • JDK 对应数字版本号

    J2SE 7 61 51 0x33 hex J2SE 6 0 61 50 0x32 hex J2SE 5 0 61 49 0x31 hex JDK 1 4 61 48 0x30 hex JDK 1 3 61 47 0x2F hex JDK
  • 打印控件

    Lodop
  • 二进制最大公约数算法

    求最大公约数的Euclid算法需要用到大量的取模运算 xff0c 这在大多数计算机上是一项复杂的工作 xff0c 相比之下减法运算 测试数的奇偶性 折半运算的执行速度都要更快些 二进制最大公约数算法避免了Euclid算法的取余数过程 二进制
  • 1、docker+k8s+kubesphere:准备(20200802更新免密)

    1 准备 docker 43 k8s 43 kubesphere准 环境准备 角色IP地址主机名docker版本硬件操作系统主192 168 5 151node151docker18 09 96核10GCentOS7 8节点192 168
  • 2、docker+k8s+kubesphere:docker安装

    2 docker安装 docker 43 k8s 43 kubesphere 卸载以前的docker yum remove y docker docker client docker client latest docker common
  • 7、docker+k8s+kubesphere:helm与tiller安装

    7 docker 43 k8s 43 kubesphere helm安装 官网地址 https kubesphere io docs zh CN installation install on k8s 官网虽然说低配置可以使用 xff0c
  • 8、docker+k8s+kubesphere:nfs安装(2020-08-02更新)

    8 docker 43 k8s 43 kubesphere nfs安装 server端安装在node151 yum y span class token function install span nfs utils rpcbind 配置文
  • 9、docker+k8s+kubesphere:Kubernetes安装(2020-08-02更新)

    9 docker 43 k8s 43 kubesphere Kubernetes安装 官网说明一定详细查看 span class token punctuation span 本文用的是2 1 1 span class token punc
  • Linux修改进程名称(setproctitle())

    每一个c程序都有个main函数 xff0c 作为程序启动入口函数 main函数的原型是int main int argc char argv 其中argc表示命令行参数的个数 xff1b argv是一个指针数组 xff0c 保存所有命令行字
  • 转载一篇文章:别人做毕业设计的思路

    发信人 zyzyis 小菜 十年一觉扬州梦 信区 SCU CS 标 题 我来谈谈毕业设计 xff08 准备篇 xff09 发信站 四川大学蓝色星空站 Sat Jan 15 11 15 53 2005 转信 很早就想写篇帖子来讲述自己做了近半

随机推荐

  • bash实现的回收站程序

    好久没写博了 哈哈 xff0c 最近在学习Linux 这是偶写的第一个shell脚本 xff0c 是一个实现类似windows里的回收站的程序 xff0c 可以避免误删文件 xff0c 希望能够对大家有所帮助 xff0c 当然自己练手是最重
  • 程序的格式

    一 格式 注 xff1a 比算法还重要 1 该注意的问题 xff1a xff08 1 xff09 大括号对齐 xff08 2 xff09 遇到 要缩进 xff1a Tab或Shift 43 Tab xff08 3 xff09 程序块之间加空
  • 解决中文版SUSELinux在远程终端上的乱码问题

    在远程桌面上打开Linux系统终端 xff0c 执行程序或某些命令时 xff0c 返回结果中出现乱码 解决方法 xff1a 计算机 gt YaST2控制中心 xff08 注 xff1a 非管理员用户 xff08 root xff09 进入时
  • 如何打开并读取QQ聊天记录Msg3.0.db文件的内容

    如何打开并读取QQ聊天记录Msg3 0 db文件的内容
  • 硬盘安装CentOS5.x笔记

    原来安装了一个64位的Linux xff0c 发现老是有些软件安装不了 xff0c 所以打算重新安装一个32位的 xff0c 选的CentOS5 2 i386版的Linux 镜像文件下载来后 xff0c 也懒得再刻盘 xff0c 打算从硬盘
  • 求一个unsigned int 数的二进制表示中有多少个1?

    第一种方法 xff0c 使用普通循环 unsigned int GetBitNum1 unsigned int nValue const unsigned int nNumOfBitInByte 61 8 unsigned int temp
  • UISlider 滑块控件—IOS开发

    声明 欢迎转载 xff0c 但是请尊重作者劳动成果 xff0c 转载请保留此框内声明 xff0c 谢谢 文章出处 xff1a http blog csdn net iukey PC上的滑块是很丑陋的 xff0c 因为我们只能通过鼠标去拖动他
  • sqlite3中BLOB数据类型存储大对象运用示例

    1 常用接口 个人比较喜欢sqlite 使用最方便 xff0c 唯一的准备工作是下载250K的源 xff1b 而且作者很热心 xff0c 有问必答 以下演示一下使用sqlite的步骤 xff0c 先创建一个数据库 xff0c 然后查询其中的
  • Linux进程同步之System V 信号量

    SystemV信号量是不属于 POSIX 标准 xff0c 它属于 SUS xff08 SingleUNIXSpecification xff09 单一规范中的扩展定义 它和 POSIX 信号量一样都提供基本的信号量功能操作 SystemV
  • IOS用CGContextRef画各种图形(文字、圆、直线、弧线、矩形、扇形、椭圆、三角形、圆角矩形、贝塞尔曲线、图片)...

    首先了解一下CGContextRef An opaque type that represents a Quartz 2D drawing environment Graphics Context是图形上下文 可以将其理解为一块画布 我们可
  • C++实现中文字频统计

    中文文本字频统计系统设计 一 实验内容 问题描述 中文信息处理中常用到汉字的字频统计 xff0c 设计一个小工具统计文本的字频 基本要求 1 输入一个中文文本 2 用三种排序分别输出结果 xff1a 按汉字出现顺序输出的字频 xff0c 按
  • [XMPP]我是怎么通过直接操作数据来为Openfire注册新用户的

    众所周知 xff0c Openfire的注册方式一般有三种 1 带内注册 In Band Registration 即客户端通过匿名方式与Openfire 服务器端建立连接并验证 xff0c 然后发起注册节点XML流 xff0c 以XMPP
  • IdeaVim插件使用技巧

    在 url 61 http kidneyball iteye com blog 1814028 IDEA Intellij小技巧和插件 url 一文中简单介绍了一下IdeaVim插件 在这里详细总结一下这个插件在日常编程中的一些常用小技巧
  • 机器学习系列(3)_逻辑回归应用之Kaggle泰坦尼克之灾

    作者 xff1a 寒小阳 amp amp 龙心尘 时间 xff1a 2015年11月 出处 xff1a http blog csdn net han xiaoyang article details 49797143 声明 xff1a 版权
  • Android 获取系统设置参数。

    转载自 xff1a http blog 163 com fang wang2005 blog static 176928073201136105613638 如何获取Android系统设置参数 下面以获取时间格式为例 xff0c 来判断时间
  • linux下默认删除文件到回收站(bash实现)

    fedora下总是会把文件不小心删除了 xff0c 所以下面的脚本把实现 xff1a 文件删除默认移动到自己的回收站里面 功能 xff1a 脚本实现删除文件或者目录到 waste xff08 自己定义 xff09 脚本附带文件名或者目录名
  • android 开机启动程序

    做一个android开机就会自动启动的程序 xff0c 该程序只要启动一次 xff0c 以后开机就会自动启动 xff0c 直到删除该程序 android开机事件会发送一个叫做Android intent action BOOT COMPLE
  • 在 Linux 平台中调试 C/C++ 内存泄漏方法

    由于 C 和 C 43 43 程序中完全由程序员自主申请和释放内存 xff0c 稍不注意 xff0c 就会在系统中导入内存错误 同时 xff0c 内存错误往往非常严重 xff0c 一般会带来诸如系统崩溃 xff0c 内存耗尽这样严重的后果
  • Java 位运算

    Java 位运算 转 一 xff0c Java 位运算 1 表示方法 xff1a 在Java语言中 xff0c 二进制数使用补码表示 xff0c 最高位为符号位 xff0c 正数的符号位为0 xff0c 负数为1 补码的表示需要满足如下要求
  • iOS学习之UINavigationController详解与使用(一)添加UIBarButtonItem

    1 UINavigationController导航控制器如何使用 UINavigationController可以翻译为导航控制器 xff0c 在iOS里经常用到 我们看看它的如何使用 xff1a 下面的图显示了导航控制器的流程 最左侧是