场景需求 一个表格视图(或者宫格视图)中,当一个单元格被选中时设置彩色样式,选中其它单元格时设置灰色样式。 2. 一个思路 通过实现选中和非选择的代理,以在适当的时机进行UI更新操作。 3....; 注意的是: 上述代码强制设置某单元格选中或者不选中那一刻,都不会回调tableview的选中代理方法,也不会发出通知UITableViewSelectionDidChangeNotification...UICollectionView 4.1 通过屏幕点击改变的选中状态回调给代理 //选中 - (void)collectionView:(UICollectionView *)collectionView...之后,通过屏幕点击选中其它cell的时候,可以执行- (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath...cell的属性,但当屏幕点击选中其它cell的时候,也不会执行原cell的非选中代理。
, didSelectItemAt indexPath: IndexPath) { } OC -(NSInteger)numberOfSectionsInCollectionView:(UICollectionView...QuestionBookHeader; if(indexPath.section == 0){ header.titleLabel.text = "我的分类" }else...UICollectionViewDelegate 自定义布局 import UIKit class MainLayout : UICollectionViewLayout { // 内容区域总大小,不是可见区域...} return attributesArray } // 这个方法返回每个单元格的位置和大小 override func layoutAttributesForItemAtIndexPath...indexPath) //当前行的Y坐标 let topSpace:CGFloat = 10; let space:CGFloat = 6;
:alwaysBounceVertical; 设置水平方向的反弹是否有效:alwaysBounceHorizontal; 是否允许滚动:scrollEnabled; 是否显示垂直方向的滚动条:showsVerticalScrollIndicator...; 是否显示水平方向的滚动条:showsHorizontalScrollIndicator; 是否允许多选:allowsMultipleSelection; #####数据源与委托协议 集合视图的委托协议是...UICollectionViewDataSource中提供的方法如下: //提供视图中节的个数,这个方法需要注意数据的行是否能与每一行有几个单元格整除,不能整除时要多加一行 - (NSInteger)numberOfSectionsInCollectionView...委托协议UICollectionViewDelegate提供的常用方法如下: //返回这个UICollectionView是否可以被选择 -(BOOL)collectionView:(UICollectionView...:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{ //获取当前要操作的Cell
[1240] 当一个屏幕无法展示 App 需要展示的所有内容时,就是 UIScrollView 大展拳脚的时候:通过使用 UIScrollView,用户可以滑动或是缩放屏幕,来看单个屏幕无法展示的内容。...关键词:#UIScrollView UIScrollView 上显示内容的区域被称为 contentView。...比如一张图片有四个屏幕之大,我们在缩放的时候只能看到其 1/4 的内容,那么它的 contentSize 就是四个屏幕合起来的尺寸大小。...首先检查 UITableViewCell 是否进行了复用。对于复杂视图的创建,可以采用惰性加载来推迟创建时间。尽量减少视图层级也是很好的优化方法。...prepare() 完成布局之后该方法被调用,它决定了哪些 item 在 CollectionView 给定的区域内可见。我们只要取交集(intersect)即可。
,基本上就可以保证CollectionView工作正常了。...,语义上要比以前清晰,命名规则也比以前严谨了。...: 是否应该高亮? ...,用作cell平时的背景 • 再其上是selectedBackgroundView,是cell被选中时的背景 • 最后是一个contentView,自定义内容应被加在这个view上 ...这次Apple给我们带来的好康是被选中cell的自动变化,所有的cell中的子view,也包括contentView中的子view,在当cell被选中时,会自动去查找view是否有被选中状态下的改变。
自打 Apple 在 iOS6 中引入 UICollectionView 这个控件之后,越来越多的 iOS 开发者选择将它作为构建 UI 的首选,如此吸引人的原因在于它的可定制化程度非常的高,非常的灵活...查阅苹果的文档可以得知,UICollectionView 的布局是抽象类 UICollectionViewLayout 的子类,它定义了 UICollectionView 中每个 item 的布局属性叫做...// 获取该列的 Y 坐标 var itemY = yArray[minHeightIndex] // 判断是否是第一行,如果换行需要加上行间距...return layoutAttributeArray.filter { $0.frame.intersects(rect) } } 这个方法决定了哪些 item 在给定的区域内是可见的...,我们可以通过数组函数提供的过滤方法 filter() ,检查之前计算的布局属性是否与该可见区域相交,然后并把相交的属性返回 好了,到这里关于瀑布流视图的布局就讲完了,附上 WaterFallFlowLayout
解决的办法是可以自己写个重用机制,不过这显然没必要,用自带重用机制的UICollectionView应该是个更好的选择。...然后要用 layout 控制布局,用最常用的 UICollectionViewFlowLayout 就行了,设置单元格的宽高,既然是翻页,宽肯定是跟屏幕等宽,高度就看你需求了,但是不要超过 collectionView...tableViewDataList = ["first table", "second table", "third table"] override func collectionView(collectionView: UICollectionView...(reuseIdentifier, forIndexPath: indexPath) as!...这样就完成了一个多表视图,实际项目一般会在 table 上方放个小滑块指示器什么的,也很简单,只要在cellForItemAtIndexPath方法中根据indexPath.section来设置滑块位置就好了
:(NSIndexPath *)indexPath{ //通过delegate获取item的大小,之前在主控制器中设置过了,其中layout是uicollectionview类的,所以传自身就可以了...的rect与传入的rect是否有交集,如果结果为true,则此cell应该显示,将布局字典中对应的indexPath加入数组 //NSLog(@"indexPathsOfItem");...= _cellInfoDic[rectStr]; [array addObject:indexPath]; } } //返回的这个数组只是屏幕中可以看得见的...attributes; } 第一个方法有一个参数 rect 这个rect的大小是 {0,-736,414,1472}(iphon8plus下),意思就是说这个rect就是两倍的屏幕大,但是屏幕下端的就没有在他那个范围之内...那如何判断cell的rect是否在参数的rect之内呢?
:(NSIndexPath _)indexPath //返回对应于indexPath的位置的追加视图的布局属性,如果没有追加视图可不重载 -(UICollectionViewLayoutAttributes...:(NSString_)decorationViewKind atIndexPath:(NSIndexPath _)indexPath // 当边界发生改变时,是否应该刷新布局。...: 2.UICollectionViewDelegate // 当指定indexPath处的item被选择时触发 - (void)collectionView:(UICollectionView *)collectionView...didSelectItemAtIndexPath:(NSIndexPath *)indexPath //返回这个UICollectionView是否可以被选择 -(BOOL)collectionView...:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath; // 下面是三个和高亮有关的方法
介绍 UIView 会占用屏幕上一个矩形的空间。 主要处理两件事:画出矩形控件,并处理其中的事件。 UIView 是层级结构,UIView 只有一个父 View,但可以有多个子 View。...} } 静态单元格 需要使用 UITableViewController。 直接在 storyboard 中布局,不需要使用数据源方法,但如果需要使用到代理方法,仍然需要在控制器中实现相应的方法。...介绍 UICollectionViewCompositionalLayout 是在已有的 Item 和 Section 的基础上,增加了一个 Group 的概念。...iOS 14 中 UICollectionView 的功能得以继续增强,可以在一定程度上替换 UITableView。...创建UICollectionView 为 UICollectionView 配置 List 式的布局,还可以配置滑动菜单。
中是否也能这样操作呢!...,分别是: 1.UICollectionView 对象2.追加视图类型,用于区别是 header 还是 footer3.IndexPath 对象,用于判断是哪个 section,从而初始化不同的 headerView...,它就会与屏幕顶部粘住不会隐藏,具体效果如下: 这效果第一眼看上去是不是感觉有点复杂,这效果起码得撸个百来行代码才能实现这效果啊!...事实上,它既不是 Cell 视图,也不是 Supplementary View,而是 UICollectionView 的 Decoration View;Decoration View 不同与前两者,...但当我真正的去整理它的一些技术点时,我发现它实在是太灵活了,以前觉得追加视图,装饰视图这些东西很简单,几行代码的事情,但事实上,当你想要去实现一些高度自定义的界面的时候,你才会认识到自己的不足,你并没有对这些知识有更深层次的认知
iOS流布局UICollectionView系列一——初识与简单使用UICollectionView 一、简介 UICollectionView是iOS6之后引入的一个新的UI控件,它和...:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{ UICollectionViewCell...; //设置是否允许选中 默认yes @property (nonatomic) BOOL allowsSelection; //设置是否允许多选 默认no @property (nonatomic...:(NSIndexPath *)indexPath; //获取所有可见cell的数组 - (NSArray *)visibleCells...; //获取所有可见cell的位置数组 - (NSArray *)indexPathsForVisibleItems; //下面三个方法是iOS9中新添加的方法,用于获取头尾视图
iOS流布局UICollectionView系列三——使用FlowLayout进行更灵活布局 一、引言 前面的博客介绍了UICollectionView的相关方法和其协议中的方法,但对布局的管理类...二、将九宫格式的布局进行升级 在第一篇博客中,通过UICollectionView,我们很轻松的完成了一个九宫格的布局,但是如此中规中矩的布局方式,有时候并不能满足我们的需求,有时我们需要每一个... *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{ if (indexPath.row%2==0) ...下面这两个方法设置分区的头视图和尾视图是否始终固定在屏幕上边和下边 @property (nonatomic) BOOL sectionHeadersPinToVisibleBounds NS_AVAILABLE_IOS...sizeForItemAtIndexPath:(NSIndexPath *)indexPath; 动态设置每个分区的EdgeInsets - (UIEdgeInsets)collectionView:
Swift中比较常见的控件UICollectionView 首先我们设置一个全局的UICollectionView和一个数据源 var colltionView : UICollectionView...(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell...//cell上的图片 var titleLabel:UILabel?//cell上title var priceLabel:UILabel?...//cell上价格 var readLabel:UILabel?...//cell上的阅读量 override init(frame: CGRect) { super.init(frame: frame) //初始化各种控件 imgView =
,也介绍了瀑布流布局的过程与思路,这篇博客是上一篇的补充,来讨论关于UICollectionView的代理方法的使用。...viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath; 设置某个item是否可以被移动...,所有方法都是可选实现: 是否允许某个Item的高亮,返回NO,则不能进入高亮状态 - (BOOL)collectionView:(UICollectionView *)collectionView shouldHighlightItemAtIndexPath...:(NSIndexPath *)indexPath; 是否可以选中某个Item,返回NO,则不能选中 - (BOOL)collectionView:(UICollectionView *)collectionView...shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath; 是否可以取消选中某个Item - (BOOL)collectionView:(UICollectionView
其实这是一个很简单的过程,关键代码也就包括下面的两部分: //注册集合视图单元格 UINib *nib = [UINib nibWithNibName:@"MyCollectionCell"...- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(...NSIndexPath *)indexPath{ MyCollectionCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier...:@"MyCollectionCellID" forIndexPath:indexPath]; cell.dataDic = self.itemList[index]; return cell...; } 但是问题是,在这些过程完成之后,自定义的单元格对象cell是可以获取,但是其上与代码文件关联的视图对象却都是nil。
在UICollectionView中的Section中我们可以为其增加Header View和Footer View, 也就是官方文档上提到的Supplementary View(追加视图)。...第一个Section的上左下右的边距都是50, 其余的Section上左下右的边距是0。...四、UICollectionViewDelegate回调实现 UICollectionViewDelegate中的代理方法主要是负责Cell的交互的,比如是否高亮,是否选,是否可编辑等,接下来要为大家详细的介绍...Objective-C #pragma mark /** * Cell是否可以高亮 */ - (BOOL)collectionView: (UICollectionView...:indexPath]; } 5.设定Cell是否可选的回调如下所示,Cell被选中时该Cell的Selected为YES, 取消选中Selected为NO; Objective-C /**
iOS流布局UICollectionView系列七——三维中的球型布局 一、引言 通过6篇的博客,从平面上最简单的规则摆放的布局,到不规则的瀑布流布局,再到平面中的圆环布局,我们突破了线性布局的局限...,在后面,我们将布局扩展到了空间,在Z轴上进行了平移,我们实现了一个类似UIPickerView的布局模型,其实我们还可以再进一步,类比于平面布局,picKerView只是线性排列布局在空间上的旋转与平移...以下是前几篇博客地址: 1.初识与简单实用UICollectionView:http://my.oschina.net/u/2340880/blog/522613 2.UICollectionView的代理方法...scrollView.contentOffset = CGPointMake(scrollView.contentOffset.x-10*320,scrollView.contentOffset.y); } } 这里面的代码比较上一篇博客中的并没有什么大的改动...滑动屏幕,这个圆球是可以进行滚动的。 TIP:这里我们只平均分配了四个方向上的布局,如果item更加小也更加多,我们可以分配到更多的方向上,使球体更加充实。
这几天好好的搞了搞苹果的开发文档上CollectionViewController的内容,亲身体验了一下CollectionViewController的强大,之前一直认为CollectionView和...在一些开源社区上分享的效果比较炫的代码,有不少是使用UICollectionView做的,UICollectionViewController是很实用的,很有必要好好的搞一下。 一...., UIViewController, UIPresentationController 和 UIView)都实现了UITraitEnvironment 这个接口,可以通过这个接口来做一些控件显示,屏幕适配等一些工作...UIContentContainer 是iOS8之后添加的新的协议,也是和Size Class相关的协议。该协议中的方法可以帮助你适配视图控制器上的内容,比如内容尺寸和位置等。...布局会控制集合视图上的单元格(Cell)的排列方式。默认的是Flow Layout. ?
这几天好好的搞了搞苹果的开发文档上CollectionViewController的内容,亲身体验了一下CollectionViewController的强大,之前一直认为CollectionView和...在一些开源社区上分享的效果比较炫的代码,有不少是使用UICollectionView做的,UICollectionViewController是很实用的,很有必要好好的搞一下。 一. ...UIWindow, UIViewController, UIPresentationController 和 UIView)都实现了UITraitEnvironment这个接口,可以通过这个接口来做一些控件显示,屏幕适配等一些工作...UIContentContainer 是iOS8之后添加的新的协议,也是和Size Class相关的协议。该协议中的方法可以帮助你适配视图控制器上的内容,比如内容尺寸和位置等。...布局会控制集合视图上的单元格(Cell)的排列方式。默认的是Flow Layout. ? 2.
领取专属 10元无门槛券
手把手带您无忧上云