ios学习:UINavigationController导航

2024-05-03 16:48

本文主要是介绍ios学习:UINavigationController导航,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文件目录如下:基本导航顺序: root -> First -> Second -> Third。其中,FirstViewController作为 navigation堆栈的rootview

 

1、创建navigation。

如果是想直接把navigation导航作为项目一开始的跟视图,把RootViewController.h文件里的nav属性放到AppDelegate.h里即可,再把RootViewController.m文件里的action的代码复制到 AppDelegate.m里的didFinishLaunchingWithOptions 方法里,最后把 self.window.rootViewController 设置 UINavigationController类型的属性nav即可

在RootViewController.h文件

复制代码
 1 #import <UIKit/UIKit.h>
 2 @class FirstViewController;
 3 
 4 @interface RootViewController : UIViewController
 5 
 6 @property (strong, nonatomic) UINavigationController *nav;
 7 
 8 - (IBAction)btnClick:(UIButton *)sender;
 9 
10 @end
复制代码

 

在RootViewController.m 文件里的随意一个自定义action里:

复制代码
 1 - (IBAction)btnClick:(UIButton *)sender {
 2     
 3     //创建一个viewcontroller
 4     FirstViewController *fristview =[[[FirstViewController alloc] init] autorelease];
 5    
 6     
 7     //初始化UINavigationController(方式一)
 8     self.nav = [[[UINavigationController alloc] initWithRootViewController:fristview] autorelease];
 9     
10     
11     //初始化UINavigationController(方式二)
12   //  self.nav = [[[UINavigationController alloc] init] autorelease];
13   //  [self.nav pushViewController:fristview animated:YES];
14 
15     
16     //初始化UINavigationController(方式三,失败,xib文件加载失败,原因暂时不明)
17    // self.nav = [[[UINavigationController alloc] initWithNibName:@"FirstViewController" bundle:nil] autorelease];
18     
19     
20     //跳转到FirstView页面
21     [self presentViewController:self.nav animated:YES completion:nil];
22     
23     
24     //这种写法一般用于往view里添加一些小控件,如button  label textField之类的,不适宜用于页面跳转
25     // [self.view addSubview:self.nav.view];
26     
27     
28 }
复制代码


2、设置viewcontroller的navigationItem属性和 toolbar、toolbarItem

(1)firstViewcontroller的navigation属性和toolbarItem属性。代码在firstviewcontroller.m的viewdidLoad方法里

每个viewcontroller都有一个navigationItem属性(只在被加载到导航堆栈里才有效),navigationItem属性里又有5个属性:UIBarButtonItem类型的leftBarButtonItem、rightBarButtonItem和backBarButtonItem,NSString类型的title(或者viewcontroller属性的titleView)、prompt。

复制代码
 1 - (void)viewDidLoad
 2 {
 3     [super viewDidLoad];
 4     // Do any additional setup after loading the view from its nib.
 5     
 6     //下面两句代码的效果一样,但貌似设置了navigationItem.title 后 title就会被不起作用了
 7     self.navigationItem.title =  @"首页123";
 8     self.title = @"首页";
 9     
10     //在title上面再加多一行,但这样子就会造成导航栏的宽度变宽
11   //  self.navigationItem.prompt = @"prompt";
12     
13     //设置rightbarbuttonitem
14     UIBarButtonItem *rightbar = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(btnClick:)] autorelease];
15 
16     self.navigationItem.rightBarButtonItem = rightbar;
17 
18     //修改backbarbuttonitem的title.这个backbarbutton是显示在下一个push进来的view的tabbar的左边的
19     //action可以设置为nil,这是的动作就是默认的动作,也就是返回到这个view
20     self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"back" style:UIBarButtonItemStylePlain target:self action:nil] autorelease];
21     
22     
23     
24     //设置toolbar是否可见(对整个navigation堆栈里的view起作用,起全局作用)
25     self.navigationController.toolbarHidden = NO;
26     
27     UIBarButtonItem *three = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:nil action:nil];
28     UIBarButtonItem *four = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:nil action:nil];
29     UIBarButtonItem *flexItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
30     
31     //toolbar是整个navigation堆栈里的view共同的,但toolbar上面的items却是每个view单独拥有的
32     //现在只是设置了当前view的toolbaritem,与其他view的toolbaritme是没有关系的
33     [self setToolbarItems:[NSArray arrayWithObjects:flexItem, three, flexItem, four, flexItem, nil]];
34     
35     [three release];
36     [four release];
37     [flexItem release];
38    
39     
40 }
复制代码


页面效果如下:

 

(2)、secondviewcontroller的navigationItem和toolbarItem

代码在viewdidLoad方法里

复制代码
 1 - (void)viewDidLoad
 2 {
 3     [super viewDidLoad];
 4     // Do any additional setup after loading the view from its nib.
 5 
 6     //设置左右barbutton
 7     UIBarButtonItem *rightbar = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(gotoThird:)] autorelease];
 8     
 9     UIBarButtonItem *leftbar = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(gotoThird:)] autorelease];
10     
11     self.navigationItem.rightBarButtonItem = rightbar;
12     self.navigationItem.leftBarButtonItem = leftbar;
13     
14     //当前view在navigation堆栈里不是rootview,所以把该viewpush到navigation堆栈里时,tabbar左边会显示backbarbutton
15     //如果给当前view设置了leftbarbutton,会把把backbarbutton覆盖掉,想同时显示两者,需如下设置:
16     self.navigationItem.leftItemsSupplementBackButton = YES;
17 
18     
19     
20     //设置当前view的toolbar可见.因为有可能从一个toolbar不可见的view导航到当前view
21     self.navigationController.toolbarHidden = NO;
22     
23 }
复制代码


效果如下:

 

(3)、thirdviewcontroller的navigationItem和toolbaritem

复制代码
 1 - (void)viewDidLoad
 2 {
 3     [super viewDidLoad];
 4     self.title = @"第三页";
 5     // Do any additional setup after loading the view from its nib.
 6     
 7     //隐藏当前view的toolbar
 8     self.navigationController.toolbarHidden = YES;
 9     
10     //设置toolbar
11     UIBarButtonItem *rightbar = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(goToRootView)] autorelease];
12     
13     self.navigationItem.rightBarButtonItem = rightbar;
14     
15    // NSArray *array = @[@"排骨", @"牛排"];
16     
17     //设置titleview,会覆盖title
18     UISegmentedControl *segment = [[[UISegmentedControl alloc] initWithItems:@[@"排骨", @"牛扒"] ] autorelease];
19     segment.segmentedControlStyle = UISegmentedControlSegmentCenter;
20     
21     self.navigationItem.titleView = segment;
22 }
复制代码

效果如下:

 

barButtonItem的style及效果对应如下:


转自:http://www.cnblogs.com/zouzf/archive/2013/01/17/2864506.html

这篇关于ios学习:UINavigationController导航的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/957190

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个