服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - IOS - iOS开发之视图切换

iOS开发之视图切换

2021-01-16 14:40执着丶执念 IOS

在iOS开发中视图的切换是很频繁的,独立的视图应用在实际开发过程中并不常见,除非你的应用足够简单。在iOS开发中常用的视图切换有三种,今天我们将一一介绍,希望大家能够喜欢。

一、视图切换

  • uitabbarcontroller (分页控制器) - 平行管理视图
  • uinavigationcontroller (导航控制器) - 压栈出栈管理视图
  • 模态窗口

二、uitabbarcontroller分页控制器

  • uitabbarcontroller是为了利用 页签切换视图 设计的控制器
  • 该控制器有一个uitabbar控件,用户通过点击uitabbar进行视图切换
  • uitabbarcontroller本身会不显示任何视图,它只是一个 容器控制器
  • 为了减少视图间的耦合,所有uitabbarcontroller的子视图的相关标题、图标等信息由子视图自己控制

iOS开发之视图切换

注意事项:

  • uitabbarcontroller会一次性初始化所有子控制器,但默认只加载第一个控制器视图
  • 每个视图控制器都有一个tabbarcontroller属性,用它来访问所在的uitabbarcontroller
  • 每个视图控制器都有一个tabbaritem属性,用它来控制uitabbarcontroller的uitabbar上的显示信息
  • tarbaritem的image属性必须是png格式,并且打开alpha通道 ,否则无法正常显示
  • uitabbarcontroller通常是作为整个程序的rootviewcontroller的,我们需要在程序的window显示之前就创建好它。

具体步骤如下:

  • 创建一个uitabbarcontroller对象
  • 创建uitabbarcontroller中每一个tab对应的要显示的对象viewcontroller
  • 通过uitabbarcontroller的viewcontrollers属性将要显示的所有viewcontroller添加到uitabbarcontroller中
  • 通过设置uitabbarcontroller对象为window.rootviewcontroller,然后显示window

 

复制代码 代码如下:

//a.初始化一个tabbar控制器
uitabbarcontroller *tarbarvc = [[uitabbarcontroller alloc] init];
//设置控制器为window的根控制器
self.window.rootviewcontroller = tarbarvc;
//b.创建子控制器
uiviewcontroller *c1 = [[uiviewcontroller alloc] init];
c1.view.backgroundcolor = [uicolor graycolor];
c1.view.backgroundcolor=[uicolor greencolor];
c1.tabbaritem.title = @"消息";
c1.tabbaritem.image = [uiimage imagenamed:@"tab_recent_nor"];
c1.tabbaritem.badgevalue = @"123";
uiviewcontroller *c2 = [[uiviewcontroller alloc] init];
c2.view.backgroundcolor = [uicolor browncolor];
c2.tabbaritem.title = @"联系人";
c2.tabbaritem.image = [uiimage imagenamed:@"tab_buddy_nor"];
uiviewcontroller *c3 = [[uiviewcontroller alloc] init];
c3.tabbaritem.title = @"动态";
c3.tabbaritem.image = [uiimage imagenamed:@"tab_qworld_nor"];
uiviewcontroller *c4 = [[uiviewcontroller alloc] init];
c4.tabbaritem.title = @"设置";
c4.tabbaritem.image = [uiimage imagenamed:@"tab_me_nor"];
//c.添加子控制器到itabbarcontroller中
tarbarvc.viewcontrollers = @[c1,c2,c3,c4];
//d.设置window为主窗口并显示出来
[self.window makekeyandvisible];

 

uitabbarcontrollerdelegate代理

 

复制代码 代码如下:

#pragma mark 该方法用于控制tabbaritem能不能选中
- (bool)tabbarcontroller:(uitabbarcontroller *)tabbarcontroller shouldselectviewcontroller:(uiviewcontroller *)viewcontroller;

 

改变uitabbarcontroller当前显示视图的方法

  • 改变selectedindex属性
  • 改变selectedviewcontroller属性
  • 改变viewcontrollers属性

三、uinavigationcontroller导航控制器

  • uinavigationcontroller中的子控制器以栈的形式存储,只有在栈顶部的控制器才能显示在界面上
  • 压栈pushcontroller,出栈popcontroller
  • uinavigationcontroller必须有一个根控制器rootviewcontroller
  • 子控制器通过navigationcontroller属性访问uinavigationcontroller
  • 在栈中的子控制器都有一个导航栏navigationbar,通过navigationitem去控制

iOS开发之视图切换


uinavigationitem属于mvc中的model,封装了要显示在uinavigationbar上的数据:

title: 标题
titleview :标题视图
leftbarbuttonitem :左按钮
rightbarbuttonitem :右按钮

下一个子视图左侧返回按钮leftbarbuttonitem的标题优先级:

  • 导航栏返回按钮backbarbuttonitem的标题
  • 导航栏navigationitem的标题
  • 视图控制器的标题

uinavigationcontroller常用的主要方法:

 

复制代码 代码如下:

#pragma mark 压栈,把控制器压入导航控制器子控制器栈中
- (void)pushviewcontroller:(uiviewcontroller *)viewcontroller animated:(bool)animated;
#pragma mark 出栈,把导航控制器子控制器栈的栈顶弹出
- (void)popviewcontrolleranimated:(bool)animated;
#pragma mark 多次出栈直到栈顶为指定控制器
- (void)poptoviewcontroller:(uiviewcontroller *)viewcontroller animated:(bool)animated;
#pragma mark 多次出栈直到栈顶为根控制器
- (void)poptorootviewcontrolleranimated:(bool)animated;

 

四、模态窗口

 

复制代码 代码如下:

#pragma mark 从下方弹出指定的视图控制器,赋予模态,即当前视图关闭前,其他视图上的内容无法操作
- (void)presentviewcontroller:(uiviewcontroller *)viewcontrollertopresent animated:(bool)flag completion:(void (^)(void))completion;
#pragma mark 关闭模态窗口,该方法在模态窗口中调用
- (void)dismissviewcontrolleranimated:(bool)flag completion:(void (^)(void))completion;

延伸 · 阅读

精彩推荐
  • IOSiOS布局渲染之UIView方法的调用时机详解

    iOS布局渲染之UIView方法的调用时机详解

    在你刚开始开发 iOS 应用时,最难避免或者是调试的就是和布局相关的问题,下面这篇文章主要给大家介绍了关于iOS布局渲染之UIView方法调用时机的相关资料...

    windtersharp7642021-05-04
  • IOSiOS通过逆向理解Block的内存模型

    iOS通过逆向理解Block的内存模型

    自从对 iOS 的逆向初窥门径后,我也经常通过它来分析一些比较大的应用,参考一下这些应用中某些功能的实现。这个探索的过程乐趣多多,不仅能满足自...

    Swiftyper12832021-03-03
  • IOSiOS 雷达效果实例详解

    iOS 雷达效果实例详解

    这篇文章主要介绍了iOS 雷达效果实例详解的相关资料,需要的朋友可以参考下...

    SimpleWorld11022021-01-28
  • IOS解析iOS开发中的FirstResponder第一响应对象

    解析iOS开发中的FirstResponder第一响应对象

    这篇文章主要介绍了解析iOS开发中的FirstResponder第一响应对象,包括View的FirstResponder的释放问题,需要的朋友可以参考下...

    一片枫叶4662020-12-25
  • IOS关于iOS自适应cell行高的那些事儿

    关于iOS自适应cell行高的那些事儿

    这篇文章主要给大家介绍了关于iOS自适应cell行高的那些事儿,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的...

    daisy6092021-05-17
  • IOSIOS 屏幕适配方案实现缩放window的示例代码

    IOS 屏幕适配方案实现缩放window的示例代码

    这篇文章主要介绍了IOS 屏幕适配方案实现缩放window的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要...

    xiari5772021-06-01
  • IOSIOS开发之字典转字符串的实例详解

    IOS开发之字典转字符串的实例详解

    这篇文章主要介绍了IOS开发之字典转字符串的实例详解的相关资料,希望通过本文能帮助到大家,让大家掌握这样的方法,需要的朋友可以参考下...

    苦练内功5832021-04-01
  • IOSiOS中tableview 两级cell的展开与收回的示例代码

    iOS中tableview 两级cell的展开与收回的示例代码

    本篇文章主要介绍了iOS中tableview 两级cell的展开与收回的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    J_Kang3862021-04-22