多控制器切换在项目中应用十分广泛 , 市面上的大部分app都能见到其身影 .
首先我认为 , 多控制器的切换 , 应尽量避免一次性加载所有的控制器页面 , 造成内存飙升 , 应尽量满足用到时加载 , 不用时不加载 .
当然也不乏有例外 , 有的时候为了更好的用户体验 , 而页面又较少时 , 可以一次性加载完毕 , 给用户造成一种切换页面加载迅速,不卡顿的假象 , 具体还是看项目需求.

之前我做多控制器切换, 大多在横向加了UIScrollView , 设置UIViewController的ChildViewControllers , 通过改变UIScrollView的偏移量来实现切换 , 如果只能按钮点击切换 , 就禁用调滚动 scrollEnabled = NO , 实际上是比较low的 ,今天突然想到 , 既然是切换 , 可不可以用UITabbarViewController来实现 , 这样有系统自己帮我们管理生命周期 和切换

仅仅是 多控制器切换 , 就可能采取非常多的策略
1. 仅仅是点击按钮切换页面 , 不可滑动切换
此种情况 , 我个人觉得巧用tabbarController实现再好不过了

2. 可以通过按钮点击切换页面 , 也可滑动切换
此种情况 , 个人建议还是用scrollView实现 , 前提是切换按钮并不是很多的情况 , 不超过4个吧 差不多

3. 顶部按钮特别多 , 又要支持滑动动画的情况 ,这种情况 我没做过 , 我再考虑是不是可以用tabbarController + 手势来解决比较好 .其实这个设计并不好 , 如果每个界面结构都是一样 , 倒可以接受 , 而这种情况也用不上多控制器切换了 , 直接请求 , 刷新就搞定了


//设置主控制器继承于UITabBarController


- (void)viewDidLoad {[super viewDidLoad];//切换栏[self setUpSelectedBar];//设置子控制器[self configChildControllers];
}

//创建控制器切换栏 , 设置按钮
- (void)setUpSelectedBar {UIView *test = [[UIView alloc]initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 44)];test.backgroundColor = [UIColor greenColor];CGFloat width = [UIScreen mainScreen].bounds.size.width /3;NSArray *arr  = @[@"按钮1",@"按钮2",@"按钮3"];for (NSInteger index = 0; index <3; index ++) {UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];[test addSubview:btn];btn.tag = index;btn.frame = CGRectMake(index *width, 0, width, 44);[btn setTitle:arr[index] forState:UIControlStateNormal];[btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];[btn addTarget:self action:@selector(touch:) forControlEvents:UIControlEventTouchUpInside];}[self.view addSubview:test];
}

//设置子控制器
//设置子控制器的好处在于 , 我们不需要去关心各个控制器的生命周期 , 控制器在用到时才会加载 , 且只加载一次 .
- (void)configChildControllers {NSArray *arr1 = @[@"ViewController1",@"ViewController2",@"ViewController3"];for (NSInteger index = 0; index <3; index ++) {Class VcClass = NSClassFromString(arr1[index]);UIViewController *viewController = [[VcClass alloc]init];[self addChildViewController:viewController];}// 隐藏tabbar ,或者直接移除
//    self.tabBar.hidden = YES;[self.tabBar removeFromSuperview];}
}

//切换控制器
- (void)touch:(UIButton *)btn
{self.selectedIndex = btn.tag;}

iOS - 多控制器切换一(巧用tabbarController)相关推荐

  1. iOS - 多控制器切换(带滑动动画)

    主控制器 ,管理控制器 .h文件 //宏 #define kScreenWidth [UIScreen mainScreen].bounds.size.width #define kScreenHei ...

  2. iOS视图控制器转场动画

    屏幕左边缘右滑返回,TabBar 滑动切换,你是否喜欢并十分依赖这两个操作,甚至觉得 App 不支持这类操作的话简直反人类?这两个操作在大屏时代极大提升了操作效率,其背后的技术便是今天的主题:视图控制 ...

  3. 从一个视图控制器切换到另一个视图控制器的几种方式

    从一个视图控制器切换到另一个视图控制器的几种方式 1,模态(modal)画面的显示方法: 例如iphone通讯录管理程序中,追加新的通讯纪录时,就是使用这种模态画面 例:点击一个按钮,进入另一个界面 ...

  4. ios标签控制器怎么用_带故事板的iOS标签栏控制器

    ios标签控制器怎么用 In this tutorial we'll look into another type of view controller namely Tab Bar Controll ...

  5. 解决iOS设备屏幕切换时页面造成的问题

    环境:IOS6~7 Safari 问题:iOS设备屏幕切换时可能会造成屏幕变大,出现左右间距等问题 解决方法: 头部加入 <meta name = "viewport" co ...

  6. iOS 横竖屏切换解决方案

    iOS 横竖屏切换解决方案 参考文章: (1)iOS 横竖屏切换解决方案 (2)https://www.cnblogs.com/qqcc1388/p/7358552.html 备忘一下.

  7. iOS导航控制器和Segues

    In this tutorial we'll discuss and implement iOS UI Navigation Controller. It's another common UI el ...

  8. 如何解决ios横竖屏切换布局错乱的问题

    如何解决ios横竖屏切换布局错乱的问题 可以使用 location.reload(); 强制刷新页面 mounted () {// 监听 resize 方法window.addEventListene ...

  9. [转]iOS 视图控制器转场详解

    转自:http://blog.devtang.com/2016/03/13/iOS-transition-guide/ 前言 屏幕左边缘右滑返回,TabBar 滑动切换,你是否喜欢并十分依赖这两个操作 ...

最新文章

  1. Python爬虫入门(3):Urllib库的基本使用
  2. 【专栏】好Leader和差Leader的8个区别
  3. 怎么用计算机把浓度转换成PH,ph换算(ph和氢离子浓度的换算计算器)
  4. Python的matplotlib(2)
  5. 找出n个自然数(1,2,3,…,n)中取r个数的组合(C语言)
  6. Swoole入门指南:PHP7安装Swoole详细教程(一)
  7. 王道计算机网络 传输层整理 超详细版
  8. OpenJudge NOI 1.7 14:大小写字母互换
  9. 数据科学和人工智能技术笔记 十六、朴素贝叶斯
  10. JAVA:基础递归算法大杂烩
  11. mysql 一台电脑多个服务_怎么在一台windows主机上安装多个mysql服务
  12. win10配置Android SDK环境变量
  13. 【总结】学了不少自然语言处理的理论知识,如何通过实战进一步提高能力?...
  14. 基础树状数组和线段树
  15. 参考文献标引方式_参考文献标注方法有哪些 为什么要标注参考文献
  16. css怎么修改图片像素,怎么改变图片宽度_word怎么改变图片像素大小
  17. 为什么装完计算机系统后进不去,电脑重新装完系统后开机后就这个样子,一直进不去是为什么?...
  18. Microsoft Visual Studio 2003 2005 2008 2010 2012 下载
  19. 使用 Arduino 和电位器控制直流电机速度
  20. python 一键爬取百度图片

热门文章

  1. 世界杯10大影帝你造么?演技派的天下
  2. x^a=b(mod c)求解x在[0,c-1]上解的个数模板+原根求法
  3. tkinter自定义下拉多选框
  4. 透明小时钟开发流程与总结
  5. Ingress基本故障排除方法
  6. Android扫描车牌,车牌拍照识别SDK
  7. 是不是程序员总会遇到一个瓶颈期,觉得自己没有进步了,该怎么解决?
  8. 一步步自定义视频播放器——TextureView+MediaPlayer自定义视频播放器
  9. ios在判断设备是ipad_识别您的 iPad 机型
  10. unity当前项目里面AssetBundle和加载的方法总结