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

贵州住房和城乡建设委员会网站/山东建站

贵州住房和城乡建设委员会网站,山东建站,做电影网站用什么软件有哪些,上海服装外贸公司排名在开发过程中,我们常常会碰到一种情况就是,在一个controller里面,经常要放很多复杂的控制,最常用的就是tar切换。tar切换,原理就是在一个controller里面,显示另一个controller的view。 如果发现&#xff1a…

在开发过程中,我们常常会碰到一种情况就是,在一个controller里面,经常要放很多复杂的控制,最常用的就是tar切换。tar切换,原理就是在一个controller里面,显示另一个controller的view。

 

如果发现:控制器的view还在,但是view上面的数据不显示,极大可能是因为:控制器被提前销毁了

  1.  一个控制器的view是可以随意调整尺寸和位置的
  2.  一个控制器的view是可以随意添加到其他view中
  3.  如果将一个控制器的view,添加到其他view中显示,那么要想办法保证控制器不被销毁
  4.  原则:只要view在,view所在的控制器必须得在,这样才能保证view内部的数据和业务逻辑正常

简单例子

//
//  ViewController.m
//  控制器tab切换view显示
//
//  Created by jiangys on 15/10/11.
//  Copyright © 2015年 Jiangys. All rights reserved.
//

#import "ViewController.h"#import "OneViewController.h"
#import "TwoViewController.h"
#import "ThreeViewController.h"@interface ViewController ()
- (IBAction)vc1;
- (IBAction)vc2;
- (IBAction)vc3;/** one */
@property (nonatomic, strong) OneViewController *one;
/** two */
@property (nonatomic, strong) TwoViewController *two;
/** three */
@property (nonatomic, strong) ThreeViewController *three;@end@implementation ViewController- (OneViewController *)one
{if (!_one) {self.one = [[OneViewController alloc] init];self.one.view.frame = CGRectMake(10, 70, 300, 300);}return _one;
}- (TwoViewController *)two
{if (!_two) {self.two = [[TwoViewController alloc] init];self.two.view.frame = CGRectMake(10, 70, 300, 300);}return _two;
}- (ThreeViewController *)three
{if (!_three) {self.three = [[ThreeViewController alloc] init];self.three.view.frame = CGRectMake(10, 70, 300, 300);}return _three;
}- (void)viewDidLoad {[super viewDidLoad];//    HestViewController *test = [[TestViewController alloc] init];//    test.view.frame = CGRectMake(100, 100, 200, 300);//    test.view.backgroundColor = [UIColor redColor];//    [self.view addSubview:test.view];//    self.test = test;// 如果发现:控制器的view还在,但是view上面的数据不显示,极大可能是因为:控制器被提前销毁了// 1.一个控制器的view是可以随意调整尺寸和位置的// 2.一个控制器的view是可以随意添加到其他view中// 3.如果将一个控制器的view,添加到其他view中显示,那么要想办法保证控制器不被销毁// 4.原则:只要view在,view所在的控制器必须得在,这样才能保证view内部的数据和业务逻辑正常
}- (IBAction)vc1 {[self.two.view removeFromSuperview];[self.three.view removeFromSuperview];[self.view addSubview:self.one.view];
}- (IBAction)vc2 {[self.one.view removeFromSuperview];[self.three.view removeFromSuperview];[self.view addSubview:self.two.view];
}- (IBAction)vc3 {[self.two.view removeFromSuperview];[self.one.view removeFromSuperview];[self.view addSubview:self.three.view];
}
@end

效果:

 

上面的做法确实是可以实现了效果,但却隐藏了很多隐患。比如,self.View 屏幕旋转,并不会通知到子控制器。当然还有很多其它的问题。

解决方案:

  1. 当控制器的view互为父子关系,那么控制器最好也互为父子关系
  2. 通过addChildViewController添加一个子控制器,那么这个子控制器就会被放到ChildViewControllers数据中,只要self存在,那么ChildViewControllers数组就会一直存在

修改:

//
//  ViewController.m
//  控制器tab切换view显示
//
//  Created by jiangys on 15/10/11.
//  Copyright © 2015年 Jiangys. All rights reserved.
//

#import "ViewController.h"#import "OneViewController.h"
#import "TwoViewController.h"
#import "ThreeViewController.h"@interface ViewController ()
- (IBAction)vc1;
- (IBAction)vc2;
- (IBAction)vc3;@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];// 当控制器的view互为父子关系,那么控制器最好也互为父子关系OneViewController *one=[[OneViewController alloc] init];one.view.frame = CGRectMake(10, 70, 300, 300);// 通过addChildViewController添加一个子控制器,那么这个子控制器就会被放到ChildViewControllers数据中// 只要self存在,那么ChildViewControllers数组就会一直存在
    [self addChildViewController:one];TwoViewController *two=[[TwoViewController alloc] init];two.view.frame = CGRectMake(10, 70, 300, 300);[self addChildViewController:two];ThreeViewController *three=[[ThreeViewController alloc] init];three.view.frame = CGRectMake(10, 70, 300, 300);[self addChildViewController:three];}- (IBAction)vc1 {OneViewController *one = self.childViewControllers[0];TwoViewController *two = self.childViewControllers[1];ThreeViewController *three = self.childViewControllers[2];[two.view removeFromSuperview];[three.view removeFromSuperview];[self.view addSubview:one.view];
}- (IBAction)vc2 {OneViewController *one = self.childViewControllers[0];TwoViewController *two = self.childViewControllers[1];ThreeViewController *three = self.childViewControllers[2];[one.view removeFromSuperview];[three.view removeFromSuperview];[self.view addSubview:two.view];
}- (IBAction)vc3 {OneViewController *one = self.childViewControllers[0];TwoViewController *two = self.childViewControllers[1];ThreeViewController *three = self.childViewControllers[2];[two.view removeFromSuperview];[one.view removeFromSuperview];[self.view addSubview:three.view];
}
@end

 

源码下载:http://pan.baidu.com/s/1pJ5VXV1

 

http://www.lbrq.cn/news/1313785.html

相关文章:

  • 哪些网站是做采购的/竞价关键词排名软件
  • 根据网站日志做seo/做推广网络
  • 电脑有固定IP 做网站/关键词推广营销
  • 江苏专业网站建设/建站推广
  • 本地最好的网站开发建设公司/nba排名最新赛程
  • 网络管理专业/魔方优化大师官网
  • 免费网站安全/优化大师官方网站
  • 宁波建网站报价/企业网站优化方案
  • 网站建设军成/百度云网盘资源搜索引擎入口
  • 用flask做网站/合肥seo优化公司
  • 山东手机网站建设公司/莱阳seo排名
  • 建设厅安全员证书查询网站/开淘宝店铺怎么运营推广
  • 在统计局网站上如何做图表/企业培训课程视频
  • 网络营销网站建设知识/深圳seo公司
  • 临淄区建设局网站/竞价推广代运营服务
  • 网站可以个人做吗/如何广告推广
  • 企业网站 建设 外包/电子商务是干什么的
  • 网站产品展示怎么做/互联网运营推广是做什么的
  • 科技信息网站建设的背景/桂林seo顾问
  • 网站开发 沈阳/品牌推广活动策划案例
  • 无锡网站建设公司排名/百度开户联系方式
  • 网站怎么更换服务器/西安关键字优化哪家好
  • 企业网站色彩/百度搜索趋势
  • 问卷调查网站JAVA怎么做/客服外包平台
  • 酷炫网站源码/通州区网站快速排名方案
  • 中原区网站建设/seo裤子的关键词首页排名有哪些
  • 同一个公司可以做几个网站吗/活动推广
  • 31省市今天新增疫情最新消息/百度seo优化推广
  • 网站快速收录的方法/线上广告接单平台
  • 杭州企业网站/湖南网站建设加盟代理
  • 详解低速容错CAN(附与高速CAN对比表)
  • docker 方式gost代理搭建以及代理链实施
  • 时序预测 | Pytorch实现CNN-LSTM-KAN电力负荷时间序列预测模型
  • 0-1 BFS :双端队列+动态规划 LCP 56. 信物传送
  • mybatis-plus-jpa-support
  • ElasticSearch重置密码