开头
- 这是分篇章,整篇请看零基础iOS开发学习日记
UICollectionViewController
实际用处
- 新特性界面
基础用法
- 这里的基础用法直接是实现了基本的新特性滚动界面,
UICollectionView
可以看这个UICollectionView - 重写初始化方法
- (instancetype)init
{
UICollectionViewFlowLayout *layout = [UICollectionViewFlowLayout new];
//item大小
layout.itemSize = [UIScreen mainScreen].bounds.size;
//上下间距,在水平方向滚动时,变为左右间距
layout.minimumLineSpacing = 0;
layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
return [super initWithCollectionViewLayout:layout];
}
复制代码
- 注册单元格等相关设置,单元格重用符oc中一般使用静态变量修饰
static NSString * const reuseIdentifier = @"guide_cell";
,swift直接let
- (void)viewDidLoad {
[super viewDidLoad];
//注册单元格
[self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier: reuseIdentifier];
//设置分页
self.collectionView.pagingEnabled = YES;
//取消滚动条
self.collectionView.showsHorizontalScrollIndicator = NO;
//取消弹性效果
self.collectionView.bounces = NO;
}
复制代码
- 设置组数
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
return 1;
}
复制代码
- 设置单元数
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
return 4;
}
复制代码
- 返回cell样式,下面的颜色是随机颜色
- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath];
cell.backgroundColor = [UIColor colorWithRed:((float)arc4random_uniform(256) / 255.0) green:((float)arc4random_uniform(256) / 255.0) blue:((float)arc4random_uniform(256) / 255.0) alpha:1.0];
return cell;
}
复制代码
注意
- 实际开发中,cell是自定义设置,可以利用自定义cell中的图片名属性和图片名,结合
indexPath
进行每个单元格不同界面的显示
NSString *imageName = [NSString stringWithFormat:@"guide%zdBackground", indexPath.row + 1];
UIImage *image = [UIImage imageNamed:imageName];
cell.image = image;
复制代码
- 有时候会需要在滚动结束的得时候进行动画或者显示特别的控件,在下面这个函数进行处理
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
}
复制代码
UITabBarController
实际用处
- 实现类似微信、微博的界面切换的功能
基本用法
- 类似抽屉的概念,分别将界面从左至右依次添加到抽屉里
- 设置title,如果是先放在
UINavigationController
,再添加到UITabBarController
,设置title
也会影响两个地方标题
RedViewController *redVC = [RedViewController new];
GreenViewController *greenVC = [GreenViewController new];
GrayViewController *grayVC = [GrayViewController new];
YellowViewController *yellowVC = [YellowViewController new];
BlueViewController *blueVC = [BlueViewController new];
//设置bar的图片
redVC.tabBarItem.image = [UIImage imageNamed:@"tabbar_home"];
//设置bar的标题
redVC.title = @"red";
greenVC.tabBarItem.image = [UIImage imageNamed:@"tabbar_profile"];
greenVC.title = @"green";
grayVC.tabBarItem.image = [UIImage imageNamed:@"tabbar_discover"];
grayVC.title = @"gray";
yellowVC.tabBarItem.image = [UIImage imageNamed:@"tabbar_message_center"];
yellowVC.title = @"yellow";
blueVC.tabBarItem.image = [UIImage imageNamed:@"tabbar_compose_icon_add"];
blueVC.title = @"blue";
[self addChildViewController:redVC];
[self addChildViewController:greenVC];
[self addChildViewController:grayVC];
[self addChildViewController:yellowVC];
[self addChildViewController:blueVC];
复制代码
一些设置
//设置渲染颜色
[UITabBar appearance].tintColor = [UIColor orangeColor];
//设置背景图片
[UITabBar appearance].backgroundImage = [UIImage imageNamed:@"tabbar_background"];
复制代码
TabBar中间添加按钮
//创建按钮
UIButton *btn = [UIButton new];
[btn setImage:[UIImage imageNamed:@"tabbar_message_center"] forState:UIControlStateNormal];
//在想要放按钮的位置,增加一个新界面,腾出空间,一般在中间添加
[self addChildViewController:[UIViewController new]];
//计算frame,向左边加一段距离
CGFloat x = 2 * self.tabBar.bounds.size.width / self.viewControllers.count;
btn.frame = CGRectInset(self.tabBar.bounds, x, 0);
[self.tabBar addSubview:btn];
复制代码
- 这里还有个问题,因为是在
viewDidLoad
中创建的控件,而创建出来的UIButton
默认是放在TabBar
下方的,所以不能实现按钮的效果,解决方法是,在viewWillAppear
时将UIButton
带到TabBar
上面
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.tabBar addSubview:self.btn];
}
复制代码
- 视图生命周期相关的整理可以看这里modal跳转与视图生命周期
总结
- 对于
UITabBarController
来说,最重要的就是子控制器的添加,在实际开发中,往往是UITabBarController
嵌套UINavigationController
,在嵌套实际显示内容的控制器
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END