iOS同种界面moda和push方式切换

对于刚入行的小白,之前对于push和modal的理解简单地停留在push的时候用导航控制器,modal的时候既可以用导航控制器也可以用控制器本身的区别,比如各位大侠代码中常见的[self.navigationer  push...]和[self present....]以及

[self.navigationer  present...](原谅没在Xcode里面写的伪代码,相信聪明如你应该so easy!~~)

废话不多说,简单区分push也就是拿到本控制器的导航控制器通过push的方式“推”到下一个控制器,显示出来的下一个控制器上的导航条其实还是之前的导航条,如果是present....(modal)方式,则是出现了新的导航条...这些基本的,简单到你们可以吐槽的点往往运用起来可以解决大的问题,比如一个界面在不同的接口,需求需要你一个用push的方式进来,然后点击左上角是push回去,而同样的界面在另一个界面接口,则需要你用modal的方式从上往下modal回去,此时我们很多人应该感觉很懵逼,这个时候,充分利用push和modal的导航栏子控件的不同点就能很完美地解决这个问题,我们只需要在自己的界面控制器.m文件里面设置导航栏左侧图标的selector方法里这样写:

1.设置导航栏返回按钮:

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"btn_return_gray"] style:UIBarButtonItemStylePlain target:self action:@selector(toBack)];

2.在selector方法里:

- (void)toBack

{

//    判断是被push还是被modal出来的;

NSArray *viewcontrollers=self.navigationController.viewControllers;

if (viewcontrollers.count>1) {

if ([viewcontrollers objectAtIndex:viewcontrollers.count-1]==self) {

//push方式

[self.navigationController popViewControllerAnimated:YES];

}

}

else{

//present方式

[self.navigationController dismissViewControllerAnimated:YES completion:nil];

}

}

这样的话,同一个界面就能完美地对接不同界面接口的不同转换模式,运用的原理也就是基于push和modal最大的区别,push方式是把栈底控制器,也就是根控制器先移除,把最新push出来的栈顶控制器保留,modal则是通过覆盖的方式,所以可以根据navigationViewController的子控制器的栈底控制器是不是本身来判断转换方式是modal还是push,这样就有效地解决了上面的问题。

PS:此处需求对应于模块开发,但若是单人开发,建议封装父类,把此方法写进父类,则采用继承后能有效解决项目开发中所有push,modal的方式切换问题。

时间: 2024-08-05 13:07:20

iOS同种界面moda和push方式切换的相关文章

大钟的ios开发之旅(4)————简单谈谈ios程序界面实现的三种方式(代码创建,xib和storyboard)

/******************************************************************************************** * author:[email protected]大钟 * E-mail:[email protected] *site:http://www.idealpwr.com/ *深圳市动力思维科技发展有限公司 * http://blog.csdn.net/conowen * 注:本文为原创,仅作为学习交流使用,转

用IOS做一个界面切换的效果(登录界面和注册界面和找回密码界面的切换)(用封装好的lable和textf创建界面)

创建一个类封装uitextfield和UIlabel (源代码.m文件) #import "TLView.h" @interface TLView () { UILabel *_desLabel;    //左边的lable UITextField *_textField;//右边的 } @end @implementation TLView //改写父类的初始化方法,处理相同的性能 - (id)initWithFrame:(CGRect)frame { self = [super i

【IOS界面布局】横竖屏切换和控件自适应(推荐)

[IOS界面布局]横竖屏切换和控件自适应(推荐) 分类: [MAC/IOS下开发]2013-11-06 15:14 8798人阅读 评论(0) 收藏 举报 横竖屏切换 自适应 第一种:通过人为的办法改变view.transform的属性. 具体办法: view.transform一般是View的旋转,拉伸移动等属性,类似view.layer.transform,区别在于 View.transform是二维的,也就是使用仿射的办法通常就是带有前缀CGAffineTransform的类(可以到API

iOS 页面间几种传值方式(属性,代理,block,单例,通知)

iOS 页面间几种传值方式(属性,代理,block,单例,通知) 姜糖水 2015-05-03 52 阅读 iOS 移动开发 第二个视图控制器如何获取第一个视图控制器的部分信息 例如 :第二个界面中的lable显示第一个界面textField中的文本 这就需要用到属性传值.block传值 那么第一个视图控制器如何获的第二个视图控制器的部分信息 例如:第一个界面中的lable显示第二个界面textField中的文本 这就需要使用代理传值 页面间传值有八大传值方式,下面我们就简单介绍下页面间常用的五

iOS开发-ViewController的生命周期和切换

ViewController在App开发中是至关重要的一环,无论是页面的展示和数据之间的交互,ViewController提供了一个框架可以管理和构建App应用.iOS中构建App提供了两种方式一种是ViewController管理比如NavigationController和UITabBarController,另外一种就是我们经常打交道用到的自定义ViewController或者是常用UITableViewController展示我们需要的数据.下面这种苹果官网的图片可以加强理解: 生命周期

iOS代码加密的几种方式

众所周知的是大部分iOS代码一般不会做加密加固,因为iOS APP一般是通过AppStore发布的,而且苹果的系统难以攻破,所以在iOS里做代码加固一般是一件出力不讨好的事情.万事皆有例外,不管iOS.adr还是js,加密的目的是为了代码的安全性,虽然现在开源畅行,但是不管个人开发者还是大厂皆有保护代码安全的需求,所以iOS代码加固有了生存的土壤.下面简单介绍下iOS代码加密的几种方式. iOS代码加密的几种方式 1.字符串加密 字符串会暴露APP的很多关键信息,攻击者可以根据从界面获取的字符串

iOS手动控制界面旋转

条条大道通罗马,解决同一个问题的手段也是多种多样的.对于<iOS 6及以上控制个别视图旋转案例>中提到的案例,我们是利用系统自带的旋转机制来解决问题的.同样地,我们也可以自己coding解决问题,且最终效果同系统的旋转动画效果是一模一样的.废话不多说,下面来大概讲解一下. 手动控制界面旋转的核心思路就是利用UIView的transform属性,旋转App的根视图.何为根视图?如果你的App的window.rootViewController是UINavigationController,那么根

iOS开发- 界面传值(1)-通知模式(广播)

之后的几篇博客, 记录下不同界面间传值的常用办法. 这篇文章记录广播的方式. iOS的设计模式中,通知模式也是其中重要的模式之一,Notification直译为通知,其实本人觉得叫做广播模式更为贴切.它的作用就是一个对象对多个对象的同步操作.用法很简单,一个对象发出一个广播,需要收听的听众就先注册一下,然后选定频道,完了就可以收听广播的内容了. 但是要注意一点, 在收听之前, 一定要先注册. 不然发送的广播接受不到, 也就是值改变了, 不会做出响应. 下面是一个简单的demo, 效果如下: 第一

linux入门学习(二):linux图形化界面与命令行界面之间的切换,以及一些系统命令

一.linux图形化界面与命令行界面之间的切换 注意:前提是你安装的 linux镜像ios 必须具备图形化功能. 1) 图形化界面--->命令行界面: ctrl + alt + F2 2) 命令行界面--->图形化界面: ctrl + alt + F1 原文地址:https://www.cnblogs.com/zhhy/p/9890855.html