当前位置:首页 > 移动端 > IOS开发之TabBarItem&NavigationBarItem

IOS开发之TabBarItem&NavigationBarItem

2022年09月17日 16:06:18移动端10

  想必大家都用过微信,微信间的页面切换是如何做成的呢?接下来我们用storyboard结合着代码来模拟一下微信的视图控制模式。

  "工欲善其事,必先利其器",下面主要是对storyboard来进行我们项目框架的搭建的,必要时,用代码实现我们的页面效果。在IOS开发中常用的多视图间的切换大致有TabBarController, NavigationBarController, 和模态窗口。第一次接触模态的概念是在Web前端的内容中接触的。下面将会结合一个实际的效果来简单的介绍一下TabBar和NavigationBar, 然后说一下用我们的storyboard和纯代码如何配置我们的NavigationBar, 上一篇博客中提到了如何用Navigation来实现页面间的切换,接下来我们要和TabBarController结合起来,来做一个防微信的视图控制 。下面的视图控制器之间的关系是如何用storyboard拖出来的,在之前的博客中有所提及,在这小编就不赘述了。

  ViewController之间的关系大致入下图:

IOS开发之TabBarItem&NavigationBarItem _ JavaClub全栈架构师技术笔记

  视图关系说明:

    1.当打开时首先会出现一个登陆页面,当登陆成功后会跳转到Tab Bar Controller中。

    2.在Tab Bar Controller中又对应着三个Navigation Controller,点击不同的item会跳转到不同的NavigationController。

    3.每个Navigation Controller中又对应着一些ViewController, 这些ViewController之间我们可以通过按钮控制NavigationController来进行切换。

  

  1.登陆页面的的跳转实现

    在登陆ViewController中要跳转到TabBarController中需要根据用户输入的信息来实现跳转。换个说法,就是登陆页面在storyboard中和其他页面是没有关系的,需要我们用业务逻辑来实现,下面是用模态的形式来进行视图切换的。登陆界面中所用的控件和键盘如何收回的,在前面的博客中都有所提及在这就不做赘述。根据用户输入跳转到TabBarController的核心代码如下:

·1 - (IBAction)tapButton:(id)sender {     
2 3 NSString * userName = [self.userName text]; 4 NSString * password = self.password.text; 5 //模拟登陆 6 if ([userName isEqual:password] == YES && ![userName isEqual:@""] && ![password isEqual:@""]) { 7 //获取storyboard 8 UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]]; 9 10 //由storyboardID获取TabBarViewController 11 UIViewController * myTabBarController = [storyboard instantiateViewControllerWithIdentifier:@"myTabBarController"]; 12 13 //将界面跳转到我们的TabBarViewController 14 [self presentViewController:myTabBarController animated:YES completion:^{ 15 }]; 16 } 17 }

 

    2.如何给我们新建的视图控制器关联我们新建的视图控制器类呢?其实在我们storyboard中还是蛮简单的,在storyboard选择我们要关联的视图控制器,在 Class中选中我们新建的视图控制器类即可。关联完以后我们就可以在相应的试图控制器类中实现我们的业务逻辑啦,操作如下:

IOS开发之TabBarItem&NavigationBarItem _ JavaClub全栈架构师技术笔记

 

    3. 用Navigation控制的ViewController之间的切换是由栈来配合着完成的,页面之间的切换也都伴随着出栈或者入栈的过程。接下来会为每个导航控制器配置NavigateBar, 在一个NavigationController中只有一个NavigationBar, 而在一个NavigationController下的各个ViewController都有属于自己的NavigationBarItem. 我们可以通过storyboard通过拖拽的方式来配置我们的NavigationBar 也可以通过手写代码的方式进行配置:

    (1)用storyboard来为我们的Navigation Bar添加按钮,拖拽完按钮再进行相关属性配置即可

IOS开发之TabBarItem&NavigationBarItem _ JavaClub全栈架构师技术笔记

    (2)我们手写代码应如何添加Bar Button Item呢?下面给出的代码是用纯代码来实现添加的。

 1     //手动添加NavigationBar上得右侧按钮
 2     //新建BarButtonItem1, 同时指定样式,和注册回调
 3     UIBarButtonItem *item1 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd
 4                                                                            target:self
 5                                                                            action:@selector(tapBarButton)];
 6     //新建BarButtonItem2, 同时指定样式,和注册回调
 7     UIBarButtonItem *item2 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCamera
 8                                                                            target:self
 9                                                                            action:@selector(tapBarButton)];
10     //往右侧添加一个按钮
11     self.navigationItem.rightBarButtonItem = item1;
12     
13     //往右侧添加两个按钮
14     self.navigationItem.rightBarButtonItems = @[item1, item2];
15     
16     //往左侧添加一个BarButton
17     self.navigationItem.leftBarButtonItem = item1;
18 
19     //往左侧添加两个BarButton
20     self.navigationItem.leftBarButtonItems = @[item1, item2];

 

    (3)在storyboard给我们的NavigationBar设置title,或者titleView, 也是用拖拽的方式加配置相应的属性完成的,在这就不在赘述,下面给入用手动添加的方法,下面的代码是给我们的titleView赋值ImageView,我们还可以给他赋值别的控件,如UIButton等,代码如下:

    //设置title的值
    self.navigationItem.title = @"END";
    
    //用给titleView设置图片
    //新建imageView
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 100, 30)];
    
    //设置图片
    UIImage * image = [UIImage imageNamed:@"topView.png"];
    
    //图片加入ImageView
    imageView.image = image;
    
    //ImageView加入到navigationItem
    self.navigationItem.titleView = imageView;

 

  4.在各个视图间切换的时候下面的Tab Bar是存在的,或减少我们的可视空间,那么我们应如何隐藏掉呢?在我们的storyboard中只需要把Hide Bottom Bar on push选中即可,选中之后我们切换到该页面时,就不会显示Tab Bar了,如下图所示。

IOS开发之TabBarItem&NavigationBarItem _ JavaClub全栈架构师技术笔记

 

  5.系统的退出功能:即退出到我们的登陆界面,下面的代码可以添加在TabView下面的任何ViewController中,代码如下:

1 //点击退出按钮
2 - (IBAction)tapExit:(id)sender {
3      [self dismissViewControllerAnimated:YES completion:^{}];
4 }

  总结: 上面的东西没有多高深的技术,用storyboard拖来拖去的(同时给出了纯代码的解决方案), 需要我们手写代码进行页面间跳转的地方我们再手写跳转。上面的各种ViewController关联以后,我们在给各个ViewController绑定实体的类后,就可以专心的实现我们每个View的业务逻辑的。在View中展示数据的时候,TableView用的也是蛮多的。 对于TableView如何使用,在后面的博客会进行详细的介绍。上面的Project用storyboard配置好以及实现相应的代码,运行效果如下:

IOS开发之TabBarItem&NavigationBarItem _ JavaClub全栈架构师技术笔记

  

作者:青玉伏案
来源链接:https://www.cnblogs.com/ludashi/p/3940230.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/mobile/42562.html

标签: iOS
分享给朋友:

“IOS开发之TabBarItem&NavigationBarItem” 的相关文章

mac下配置Charles,安装证书,连接iOS手机抓包

mac下配置Charles,安装证书,连接iOS手机抓包

目录 一、前置操作 二、mac上配置并信任证书 三、iOS手机手安装证书 四、查看效果  mac:MacBook Pro (Retina, 15-inch, Mid 2015) 手机:iPhone 12 p...

Flutter设置App的应用名字和应用logo图标的方法(android ios web)

Flutter设置App的应用名字和应用logo图标的方法(android ios web)

在前面的几期给大家介绍了flutter的安装以及一些简单的配置,还运行了helloword 那么接下来就带领大家了解如何设置应用名称以及图标 Flutter设置App的应用名字和应用logo图标的方法, 知识点虽然简单,但是不知道这个知...

IOS开发之新浪围脖

IOS开发之新浪围脖

  IOS开发和Web开发一样,网络请求方式包括Get和Post方式。Get和Post两者有和特点和区别,在本篇博客中不做过多的论述,本篇的重点在于如何GET数据和POST数据。下面还会提到如何在我们的项目中使用CocoaPods, CocoaPods的安装和使用教程请参考链接http...

iOS-Runtime知识点整理

iOS-Runtime知识点整理

runtime的5个核心用法:1.获取属性列表2.交换方法实现3.关联对象4.拦截未实现的方法、动态添加实现5.动态创建一个类 本文目录 1.Runtime简介 2.Runtime相关的头文件 3.技术点和应用场...

iOS 静态类库项目的建立与使用

iOS 静态类库项目的建立与使用

本文详细说明了如何使用 Xcode 建立于使用 CocoaTouch Static Library 项目。 新建 Xcode workspace 打开 Xcode , 选择 File -> New -> Workspace , 将 Workspace...

iOS开发系列—Objective-C之Foundation框架

iOS开发系列—Objective-C之Foundation框架

我们前面的章节中就一直新建Cocoa Class,那么Cocoa到底是什么,它和我们前面以及后面要讲的内容到底有什么关系呢?Objective-C开发中经常用到NSObject,那么这个对象到底是谁?它为什么又出现在Objective-C中间呢?今天我们将揭开这层面纱,重点分析在IOS...

WebRTC iOS平台的基本实现

前面介绍了如何下载编译WebRTC,现在介绍如何利用WebRTC在iOS客户端上简单实现音视频通话。 对下载编译还有问题的,请先查看:WebRTC(iOS)下载编译。 不需要下载源码只需要库文件的也可以用CocoaPods下载编译好的库:pod 'libjingle_pee...

Xamarin.iOS开发初体验

Xamarin.iOS开发初体验

Xamarin是一个跨平台开发框架,这一框架的特点是支持用C#开发IOS、Android、Windows Phone和Mac应用,这套框架底层是用Mono实现的。 Mono是一款基于.NET框架的开源工程,包含C#语言编译器、CLR运行时和一组类库,能运行于Win...

iOS,你真的越来越像Android了

iOS,你真的越来越像Android了

周一的苹果开发者大会上,Apple介绍了iOS 7的各种新的特性,虽然真正发布要到今年秋季,但是作为程序员我们还是可以下载开发版本来亲身体验一番的。本来想下载更新四代的iPod Touch上,但是似乎没有提供,所以只能跟同事借来一部iPone 5测试机更新到iOS 7。如果没...

教你如何在iOS项目中设置各种字体

教你如何在iOS项目中设置各种字体

在iOS开发中设置字体的方法有很多种,下面为大家介绍比较常用的三种方法 1.使用系统默认提供的字体 系统默认提供的字体主要是指UIFont中提供的字体,其使用代码为: fontLabel.font = [UIFont fontWithName:@"Mario...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。