当前位置: 首页 > news >正文

厦门市城市建设档案馆网站卢松松网站的百度广告怎么做的

厦门市城市建设档案馆网站,卢松松网站的百度广告怎么做的,搜狐快站做网站教程,升级wordpress 错误:连接服务器时出错_请检查设置.「OC」present和push操作区别以及混合推出的实现 文章目录 「OC」present和push操作区别以及混合推出的实现前言present用途while循环越级返回通知越级返回添加present动画 push模态视图和push视图混合跳转操作一#xff1a;控制器Apresent控制器B#xff0c;控制器B再将控制…「OC」present和push操作区别以及混合推出的实现 文章目录 「OC」present和push操作区别以及混合推出的实现前言present用途while循环越级返回通知越级返回添加present动画 push模态视图和push视图混合跳转操作一控制器Apresent控制器B控制器B再将控制器Cpush出来操作二控制器1push出控制器2控制器2present控制器3使用代理直接返回控制器1 总结 前言 在viewController的生命周期之中我们探究了present以及push不同操作之中生命周期的方法调用以及在暑假的时候学习了如何实现自定义模态视图和自定义模态视图动画。因此我继续探究present以及push操作的相关区别以及学习如何实现视图的混合推出。 present 用途 用简单的几行代码先展示present的用途 ViewController* vc [[ViewController alloc] init]; [self presentViewController:vc2 animated:YES completion:nil];对应的dismiss方法 [self dismissViewControllerAnimated:YES completion:nil];对于我们的present来说我们的返回和进入都是逐级进行的代码如下 ViewController1.h: #import UIKit/UIKit.hinterface ViewController1 : UIViewControllerendViewController1.m: #import ViewController1.h #import ViewController2.himplementation ViewController1- (void)viewDidLoad {[super viewDidLoad];UIButton *presentButton [UIButton buttonWithType:UIButtonTypeSystem];[presentButton setTitle:Present ViewController2 forState:UIControlStateNormal];[presentButton addTarget:self action:selector(presentViewController2) forControlEvents:UIControlEventTouchUpInside];presentButton.frame CGRectMake(100, 100, 200, 50);[self.view addSubview:presentButton]; }- (void)presentViewController2 {ViewController2 *vc2 [[ViewController2 alloc] init];[self presentViewController:vc2 animated:YES completion:nil]; }endViewController2.h: #import UIKit/UIKit.hinterface ViewController2 : UIViewControllerendViewController2.m: #import ViewController2.h #import ViewController3.himplementation ViewController2- (void)viewDidLoad {[super viewDidLoad];UIButton *presentButton [UIButton buttonWithType:UIButtonTypeSystem];[presentButton setTitle:Present ViewController3 forState:UIControlStateNormal];[presentButton addTarget:self action:selector(presentViewController3) forControlEvents:UIControlEventTouchUpInside];presentButton.frame CGRectMake(100, 200, 200, 50);[self.view addSubview:presentButton]; }- (void)presentViewController3 {ViewController3 *vc3 [[ViewController3 alloc] init];[self presentViewController:vc3 animated:YES completion:nil]; }endViewController3.h: #import UIKit/UIKit.hinterface ViewController3 : UIViewControllerendViewController3.m: #import ViewController3.himplementation ViewController3- (void)viewDidLoad {[super viewDidLoad];UIButton *dismissButton [UIButton buttonWithType:UIButtonTypeSystem];[dismissButton setTitle:Dismiss forState:UIControlStateNormal];[dismissButton addTarget:self action:selector(dismissViewController) forControlEvents:UIControlEventTouchUpInside];dismissButton.frame CGRectMake(100, 300, 200, 50);[self.view addSubview:dismissButton]; }- (void)dismissViewController {[self.presentingViewController dismissViewControllerAnimated:YES completion:nil]; }end在这个示例中控制器1包含一个按钮点击后会present出控制器2。控制器2也包含一个按钮点击后会present出控制器3。在控制器3中点击按钮会通过dismiss方式逐级返回到前一个控制器直到回到控制器1。 但是我们也可以用代码直接进行返回这就要说到我们暑假自定义模态视图学习的关于presentedViewController以及presentingViewController的相关概念即执行推出操作的上文来说为presentedViewController为被它推出的下文执行推出操作的下文的presentingViewController为上文。 while循环越级返回 我已开始的设想是使用while循环直到到达想要的控制器我使用isKindOfClass的方法 - (void)touchesBegan:(NSSetUITouch * *)touches withEvent:(UIEvent *)event{UIViewController *currentViewController self.presentingViewController;while (currentViewController) {if ([currentViewController isKindOfClass:[ViewController class]]) {// 找到所需的视图控制器ViewController *desiredViewController (ViewController *)currentViewController;// 在这里执行dismiss操作[desiredViewController dismissViewControllerAnimated:YES completion:nil];break;}currentViewController currentViewController.presentingViewController;} }实现的也是如下效果 、 通知越级返回 可是这样直接进行遍历似乎还是有点麻烦只要present的视图够多或者足够复杂的话这样似乎会对性能造成一定的损伤于是我用上了前段时间学习的通知传值来解决这个问题 在需要直接返回的地方发送通知可以是任何一个视图控制器 [[NSNotificationCenter defaultCenter] postNotificationName:DirectReturnNotification object:nil userInfo:{targetViewController: ViewController1}];在需要响应直接返回的视图控制器中监听通知并执行相应的返回操作。 [[NSNotificationCenter defaultCenter] addObserver:self selector:selector(handle:) name:DirectReturnNotification object:nil]; } 接着写一下接受到通知之后的相关方法我们这里用targetViewController的字符串区别一下不同的控制器 - (void)handleDirectReturnNotification:(NSNotification *)notification {NSString *targetViewController notification.userInfo[targetViewController];if ([targetViewController isEqualToString:ViewController2]) {[self dismissViewControllerAnimated:YES completion:nil];} }- (void)handleDirectReturnNotification:(NSNotification *)notification {NSString *targetViewController notification.userInfo[targetViewController];if ([targetViewController isEqualToString:ViewController1]) {[self dismissViewControllerAnimated:YES completion:nil];} }控制器3的完整代码如下 #import ViewController3.hinterface ViewController3 ()endimplementation ViewController3- (void)viewDidLoad {[super viewDidLoad];self.view.backgroundColor [UIColor greenColor];UIButton *returnButton1 [UIButton buttonWithType:UIButtonTypeSystem];[returnButton1 setTitle:Direct Return to ViewController1 forState:UIControlStateNormal];[returnButton1 addTarget:self action:selector(returnToViewController1) forControlEvents:UIControlEventTouchUpInside];returnButton1.frame CGRectMake(100, 300, 200, 50);[self.view addSubview:returnButton1];UIButton *returnButton [UIButton buttonWithType:UIButtonTypeSystem];[returnButton setTitle:Direct Return to ViewController2 forState:UIControlStateNormal];[returnButton addTarget:self action:selector(returnToViewController2) forControlEvents:UIControlEventTouchUpInside];returnButton.frame CGRectMake(100, 500, 200, 50);[self.view addSubview:returnButton]; } - (void)returnToViewController1 {// 发送通知指示需要直接返回到ViewController1[[NSNotificationCenter defaultCenter] postNotificationName:DirectReturnNotification object:nil userInfo:{targetViewController: ViewController1}]; } - (void)returnToViewController2 {// 发送通知指示需要直接返回到ViewController1[[NSNotificationCenter defaultCenter] postNotificationName:DirectReturnNotification object:nil userInfo:{targetViewController: ViewController2}]; }end完整示例如下 注在学习过程之中我又了解到如果使用消息传值的方法去实现直接跳转的方法会提高那个代码的耦合性那这个越级直接dismiss的方法可能需要我们通过实际运用的情况来选择我们需要的方法 添加present动画 在present的过程之中我们也可以添加我们想要的动画使得present的过程更加流畅这段代码我们放在视图即将present的操作之前并且取消present操作之中允许动画的属性。 CATransition * transition [CATransition animation];transition.type moveOut;transition.subtype fromCenter;transition.duration 0.3;//移除当前window的layer层的动画[self.view.window.layer removeAllAnimations];//将定制好的动画添加到当前控制器window的layer层[self.view.window.layer addAnimation:transition forKey:nil];ViewController3 *vc3 [[ViewController3 alloc] init];[self presentViewController:vc3 animated:NO completion:nil];效果如下 push push就是我们在栈之中操作push因此我们可以知道这个操作跳转的控制器实际上就是用一个类似栈的结构去存储这些个控制器接下来是一个代码示例 ViewController* vc [[ViewController4 alloc] init]; [self.navigationController pushViewController:vc animated:YES];我们可以看到与present操作不同我们是使用导航控制器即self.navigationController来实现push的方法我们使用push的方法将当前的控制器推进导航控制器之中栈这个栈我们可以通过self.navigationController的属性来找到 self.navigationController.viewControllers对应的消失视图的方法为pop方法如下 [self.navigationController popViewControllerAnimated:YES];但是和present的另一个不同点由于使用一个数组模拟栈所以我们其实可以很容易拿到对应层的控制器即pop是可以不逐级返回的 [self.navigationController popToRootViewControllerAnimated:YES];//直接返回到根视图 [self.navigationController popToViewController:viewController animated:YES];//返回指定的某一层视图控制器在关于返回指定的某一层之中我们可以较为简单的访问导航控制器的栈的下标self.navigationController.viewControllers[i]或者使用在present处的方法使用isKindOfClass来找到对应的controller 对应代码功能在此不多做赘述贴出以供参考 ViewController1 #import ViewController1.h #import ViewController2.himplementation ViewController1- (void)viewDidLoad {[super viewDidLoad];UIButton *pushButton [UIButton buttonWithType:UIButtonTypeSystem];[pushButton setTitle:Push to ViewController2 forState:UIControlStateNormal];[pushButton addTarget:self action:selector(pushToViewController2) forControlEvents:UIControlEventTouchUpInside];pushButton.frame CGRectMake(100, 300, 200, 50);[self.view addSubview:pushButton]; }- (void)pushToViewController2 {ViewController2 *viewController2 [[ViewController2 alloc] init];[self.navigationController pushViewController:viewController2 animated:YES]; }endViewController2 #import ViewController2.h #import ViewController3.himplementation ViewController2- (void)viewDidLoad {[super viewDidLoad];UIButton *pushButton [UIButton buttonWithType:UIButtonTypeSystem];[pushButton setTitle:Push to ViewController3 forState:UIControlStateNormal];[pushButton addTarget:self action:selector(pushToViewController3) forControlEvents:UIControlEventTouchUpInside];pushButton.frame CGRectMake(100, 300, 200, 50);[self.view addSubview:pushButton]; }- (void)pushToViewController3 {ViewController3 *viewController3 [[ViewController3 alloc] init];[self.navigationController pushViewController:viewController3 animated:YES]; }endViewController3 #import ViewController3.himplementation ViewController3- (void)viewDidLoad {[super viewDidLoad];self.view.backgroundColor [UIColor greenColor]; }- (void)touchesBegan:(NSSetUITouch * *)touches withEvent:(UIEvent *)event {[self.navigationController popToRootViewControllerAnimated:YES]; }end模态视图和push视图混合跳转 简单了解了push和present的相关操作我们实际应该当中都会 操作一控制器Apresent控制器B控制器B再将控制器Cpush出来 似乎这个操作很简单我一开始就写出了以下代码 ViewController1.h: #import UIKit/UIKit.hinterface ViewController1 : UIViewControllerendViewController1.m: #import ViewController1.h #import ViewController2.himplementation ViewController1- (void)viewDidLoad {[super viewDidLoad];UIButton *presentButton [UIButton buttonWithType:UIButtonTypeSystem];[presentButton setTitle:Present ViewController2 forState:UIControlStateNormal];[presentButton addTarget:self action:selector(presentViewController2) forControlEvents:UIControlEventTouchUpInside];presentButton.frame CGRectMake(100, 100, 200, 50);[self.view addSubview:presentButton]; }- (void)presentViewController2 {ViewController2 *vc2 [[ViewController2 alloc] init];[self presentViewController:vc2 animated:YES completion:nil]; }endViewController2.h: #import UIKit/UIKit.hinterface ViewController2 : UIViewControllerendViewController2.m: #import ViewController2.h #import ViewController3.himplementation ViewController2- (void)viewDidLoad {[super viewDidLoad];UIButton *pushButton [UIButton buttonWithType:UIButtonTypeSystem];[pushButton setTitle:Push ViewController3 forState:UIControlStateNormal];[pushButton addTarget:self action:selector(pushViewController3) forControlEvents:UIControlEventTouchUpInside];pushButton.frame CGRectMake(100, 200, 200, 50);[self.view addSubview:pushButton]; }- (void)pushViewController3 {ViewController3 *vc3 [[ViewController3 alloc] init];[self.navigationController pushViewController:vc3 animated:YES]; }endViewController3.h: #import UIKit/UIKit.hinterface ViewController3 : UIViewControllerendViewController3.m: #import ViewController3.himplementation ViewController3- (void)viewDidLoad {[super viewDidLoad];self.view.backgroundColor [UIColor yellowColor]; }end但是当我们进行尝试的时候就会发现在模态视图之中没有办法直接将控制器push出来十分奇怪而后查询了相关资料因为我们实现push的操作需要使用导航栏控制器而对于控制器2来说它自己只是作为模态视图被临时present出来它并没有对应的导航栏控制器可以实现push操作那其实解决方法很简单我们在控制器2在推出的时候用一个导航栏控制器包装一下即可即在控制器1之中修改控制器3即可被正确的push出来 - (void)presentViewController2 {ViewController2 *vc2 [[ViewController2 alloc] init];UINavigationController *nav2 [[UINavigationController alloc] initWithRootViewController:vc2];[self presentViewController:nav2 animated:YES completion:nil]; }注如果我们想直接返回控制器1只需要在控制器3之中使用一下方法即可 [self.navigationController dismissViewControllerAnimated:YES completion:nil]; 操作二控制器1push出控制器2控制器2present控制器3使用代理直接返回控制器1 在 iOS 开发中如果您想要在控制器3中直接返回到控制器1可以使用代理模式或者闭包回调来实现。下面是一个简单的示例演示了如何在控制器3中通过代理模式实现直接返回到控制器1的操作。 ViewController1 #import ViewController2.h #import ViewController3.h #import returnDelegate.h interface ViewController2 ()returnDelegateendimplementation ViewController1- (void)viewDidLoad {[super viewDidLoad];UIButton *pushButton [UIButton buttonWithType:UIButtonTypeSystem];[pushButton setTitle:Push to ViewController2 forState:UIControlStateNormal];[pushButton addTarget:self action:selector(pushToViewController2) forControlEvents:UIControlEventTouchUpInside];pushButton.frame CGRectMake(100, 300, 200, 50);[self.view addSubview:pushButton]; }- (void)pushToViewController2 {ViewController2 *viewController2 [[ViewController2 alloc] init];[self.navigationController pushViewController:viewController2 animated:YES]; }endViewController2 #import ViewController2.h #import ViewController3.himplementation ViewController2- (void)viewDidLoad {[super viewDidLoad];UIButton *presentButton [UIButton buttonWithType:UIButtonTypeSystem];[presentButton setTitle:Present ViewController3 forState:UIControlStateNormal];[presentButton addTarget:self action:selector(presentViewController3) forControlEvents:UIControlEventTouchUpInside];presentButton.frame CGRectMake(100, 300, 200, 50);[self.view addSubview:presentButton]; }- (void)presentViewController3 {ViewController3 *viewController3 [[ViewController3 alloc] init];viewController3.delegate self;UINavigationController *navController [[UINavigationController alloc] initWithRootViewController:viewController3];[self presentViewController:navController animated:YES completion:nil]; }- (void)returnToViewController1 {[self.navigationController popToRootViewControllerAnimated:YES]; }endViewController3 #import ViewController3.h #import ViewController2.h interface ViewController3 () property(nonatomic, weak) ViewController2 *delegate; endimplementation ViewController3- (void)viewDidLoad {[super viewDidLoad];self.view.backgroundColor [UIColor greenColor];UIButton *returnButton [UIButton buttonWithType:UIButtonTypeSystem];[returnButton setTitle:Return to ViewController1 forState:UIControlStateNormal];[returnButton addTarget:self action:selector(returnToViewController1) forControlEvents:UIControlEventTouchUpInside];returnButton.frame CGRectMake(100, 300, 200, 50);[self.view addSubview:returnButton]; }- (void)returnToViewController1 {if (self.delegate [self.delegate respondsToSelector:selector(returnToViewController1)]) {[self.delegate returnToViewController1];[self dismissViewControllerAnimated:NO completion:nil];} }endretrunDelegate #ifndef returnDelegate_h #define returnDelegate_h class ViewController2;protocol returnDelegate NSObject- (void)returnToViewController1;end在这个示例中ViewController2通过present方式展示ViewController3并在ViewController2中实现了一个代理方法returnToViewController1用来返回到ViewController1。在ViewController3中点击按钮后会通过代理将操作传递给ViewController2从而实现直接返回到ViewController1的功能。 总结 本文总结了present和push的相关区别以及如何去实现push和present如何在有需求是实现混合转场的操作。
http://www.dnsts.com.cn/news/138768.html

相关文章:

  • 盘锦化工网站建设旅游网站哪个好
  • 程序员做网站赚钱有没有IT做兼职的网站
  • 网站后台怎么更新申请免费的网站
  • 网站建设公司不能备案吗网站建设先有域名然后呢
  • 大连网站设计培训班开店铺的流程
  • 一个网站只有一个核心关键词云企网站建设开发
  • 网站开发工具有淘宝官网首页登录电脑版
  • 网站开发语言那个好wordpress 30天
  • python 网站开发 prf网站开发框架技术
  • 东莞网站的制作设计wordpress kratos
  • 网站建设前途网站上传文件功能实现
  • 智库网站建设投资网站怎么做
  • 海珠区建网站公司建设路84号 网站备案
  • 湖北建科建设工程有限公司网站广西建设厅网站在线服务
  • 葫芦岛做网站的公司做ppt好的模板下载网站有哪些内容
  • php 网站后台管理系统wordpress建站要钱吗
  • 如何是网站排名上升响应式网站切图
  • 织梦做网站也是模板吗2018年网站风格
  • 接网站开发做多少钱百度统计数据
  • 当今做网站的语言有哪些推荐几个没封的网址
  • 网站维护员招聘免费logo设计在线设计制作工具
  • 冠县网站建设网页版游戏排行榜田田田田田田田田
  • 莱芜网站快排公司的网站备案
  • 免费网站安全软件下载云酒店网站建设
  • 福州英文网站建设商业网站建设常识
  • 有源码如何做网站做装修的网站
  • 学做网站难不难上海有名的广告公司
  • 工商注册官方网站龙岗门户
  • 合格的网站设计师需要会什么软件怎么制作网页推广
  • 官方网站建设建议网易企业邮箱收件服务器主机名