iOS -- childViewController 的问题
2016-02-04 17:03
417 查看
做开发,会经常碰到图片这种类似的需求.或是segmentControl 或者两个button控制两个界面直接的切换
推荐一个比较好用的方法
新建两个viewController,我们命名为FirstViewController 和 SecondViewController
在RootViewController的代码如下
#import "RootViewController.h" #import "FirstViewController.h" #import "SecondTableViewController.h" @interface RootViewController ()<UIScrollViewDelegate> @property (nonatomic, strong) UISegmentedControl *segmentedControl; @property (nonatomic, strong) UIScrollView *scrollView; @property (nonatomic, strong) FirstViewController *firstVC; @property (nonatomic, strong) SecondTableViewController *secondTVC; @end @implementation RootViewController - (void)viewDidLoad { [super viewDidLoad]; // 适应scrollView self.automaticallyAdjustsScrollViewInsets = NO; self.segmentedControl = [[UISegmentedControl alloc] initWithItems:@[@"first", @"second"]]; self.navigationItem.titleView = self.segmentedControl; [self.segmentedControl addTarget:self action:@selector(segmentedControlAction:) forControlEvents:UIControlEventValueChanged]; self.segmentedControl.selectedSegmentIndex = 0; // 创建scrollView self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 64, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height - 64)]; [self.view addSubview:self.scrollView]; // 设置scrollView的内容 self.scrollView.contentSize = CGSizeMake([UIScreen mainScreen].bounds.size.width * 2, [UIScreen mainScreen].bounds.size.height - 64); self.scrollView.pagingEnabled = YES; self.scrollView.bounces = NO; // 创建控制器 self.firstVC = [FirstViewController new]; self.secondTVC = [[SecondTableViewController alloc] initWithStyle:UITableViewStylePlain]; // 添加为self的子控制器 [self addChildViewController:self.firstVC]; [self addChildViewController:self.secondTVC]; self.firstVC.view.frame = CGRectMake(0, 0, self.scrollView.frame.size.width, CGRectGetHeight(self.scrollView.frame)); self.secondTVC.view.frame = CGRectMake([UIScreen mainScreen].bounds.size.width, 0, self.scrollView.frame.size.width, CGRectGetHeight(self.scrollView.frame)); [self.scrollView addSubview:self.firstVC.view]; [self.scrollView addSubview:self.secondTVC.view]; // 设置scrollView的代理 self.scrollView.delegate = self; }
这里的要点就是我们在RootViewController上添加两个子视图FirstViewController 和 SecondViewController
// 添加为self的子控制器 [self addChildViewController:self.firstVC]; [self addChildViewController:self.secondTVC];
这样写的好处是将两个页面完全与RootViewController完全独立开来,各自处理各自的数据与页面内容.
碰到类似的情况了,都可以用viewController作为childViewController去添加.比起添加自定义的UIView方便一点
比如页面跳转,我们点击firstViewController的时候,就可以用
[self.parentViewController.navigationController pushViewController:<#(nonnull UIViewController *)#> animated:YES];
直接调用父视图的navigationController跳转.
/** * 分段控制器点击方法 */ - (void)segmentedControlAction:(UISegmentedControl *)sender { [self.scrollView setContentOffset:CGPointMake(sender.selectedSegmentIndex * self.scrollView.frame.size.width, 0) animated:NO]; } - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { NSInteger n = scrollView.contentOffset.x / scrollView.frame.size.width; self.segmentedControl.selectedSegmentIndex = n; }
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- winform异型不规则界面设计的实现方法
- Android中设置只有程序第一次运行才显示的界面实现思路
- hta 实现的五子棋界面
- 讲解iOS开发中基本的定位功能实现
- js判断客户端是iOS还是Android等移动终端的方法
- IOS开发环境windows化攻略
- 浅析iOS应用开发中线程间的通信与线程安全问题
- 检测iOS设备是否越狱的方法
- android开发之欢迎界面的小例子
- C#中载入界面的常用方法
- .net平台推送ios消息的实现方法
- 探讨Android与iOS,我们将何去何从?
- android编程实现局部界面动态切换的方法