UICollectionView和UITableView有相同的API设计理念——都是基于dataSource以及delegate驱动的。...例如,UITableView中的如下代理方法: - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger...其有三个比较重要的属性:minimumInteritemSpacing设置一行中两个Item之间的最小间距,minimumLineSpacing设置上下两行之间的最小间距,itemSize设置每一个item...通过UICollectionViewFlowLayout中的itemSize属性是将所有的Item都设置成一个统一的样式,如果我们需要对特定的item进行自定义样式,那么就需要实现UICollectionViewDelegateFlowLayout...,这是UITableView和UICollectionView的最大的不同。
multi_table.gif 如图所示的多表视图是一个很常用的东西,之前我是用UIScrollView和UITableViewController做的。...把当前的控制器作为一个父控制器,添加三个UITableViewController的实例作为子控制器,把父控制器中的 scrollView 作为容器,然后添加子控制器中的 tableView 作为子视图...dataSource(同理可自行添加 delegate),是 tableView 的数据源,可能大部分人习惯把控制器又当 dataSource 又当 delegate,不过我比较喜欢分开,就算是用同一个控制器...这边 cell 是会被复用的,在翻到第三页时,会复用第一页的 cell ,第四页复用第二页的 cell……依此类推,所以需要给 cell 中的tableView调用 reloadData方法,不然就算改变了表中的数据...这样就完成了一个多表视图,实际项目一般会在 table 上方放个小滑块指示器什么的,也很简单,只要在cellForItemAtIndexPath方法中根据indexPath.section来设置滑块位置就好了
TableView是iOS开发中经常用到的View,针对不同的显示需求,我们需要不同的Cell来进行显示,比较复杂的显示我们一般会自定义Cell的样式,但是简单的显示就可以靠iOS本身支持的列表类型了。...iOS目前支持四中列表类型,分别是: UITableViewCellStyleDefault:默认类型,可以显示图片和文本 UITableViewCellStyleSubtitle:可以显示图片、文本和子文本...UITableViewCellStyleValue1:可以显示图片、文本和子文本 UITableViewCellStyleValue2:可以显示文本和子文本 其显示的样式也各不相同,按顺序如下所示:...要设置也很简单,代码如下: - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath...,支持显示图片和文本 { NSString *CellOne = @"CellOne"; // 设置tableview类型
在直播卖货小程序源码中,一般都包含商品分类页面,如下图,那么这个页面是如何通过代码实现的呢?下面,小编以iOS版本的开发过程为例,来讲述下实现过程。...图片1.png 左边一级分类使用tableview来展示,右边的耳机分类使用collectionview来展示,主要就是实现一二级分类的联动。下面主要讲下点击和滑动。...1、左侧一级分类的点击实现 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath...的代理方法中更改一级分类的选中 ///collectionview将要加载头尾视图调用的方法 - (void)collectionView:(UICollectionView *)collectionView...已经加载完头尾视图调用的方法 - (void)collectionView:(UICollectionView *)collectionView didEndDisplayingSupplementaryView
场景需求 一个表格视图(或者宫格视图)中,当一个单元格被选中时设置彩色样式,选中其它单元格时设置灰色样式。 2. 一个思路 通过实现选中和非选择的代理,以在适当的时机进行UI更新操作。 3....UICollectionView 4.1 通过屏幕点击改变的选中状态回调给代理 //选中 - (void)collectionView:(UICollectionView *)collectionView...之后,通过屏幕点击选中其它cell的时候,可以执行- (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath...cell的时候,UITableView并不会执行- (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath...手动执行代理 上述两张方案的区别在于,设置选中状态完后,屏幕点击其它cell时,一个执行原cell的didDeselect方法,一个不执行。
:@"ImageLabelTableViewCell" forIndexPath:indexPath]; 如果用的storybord中的tableview的cell直接用dequeueReusableCellWithIdentifier...方法就行了 注意dequeueReusableCellWithIdentifier方法是从已经实例化的cell中查找id为textLeftCell的对象并进行拷贝 实例化视图控制器 从storyboard...中 Swift self.storyboard?....MyCell; OC MyCell *cell = [self.collectionView dequeueReusableCellWithReuseIdentifier:@"MyCell" forIndexPath...:indexPath]; 从xib中实例化对象 let cell = NSBundle.mainBundle().loadNibNamed("FuImageLabelTableViewCell", owner
大家好,又见面了,我是你们的朋友全栈君。...项目中使用了UITableViewController,里面有用到UITextView需要点击键盘外的地方来隐藏我的键盘 自定义一个uitableview,继承UITableView。
子 View 的顺序和子 View 返回的数组中的位置有关(storyboard 中左侧的树形结构图中的先后顺序)。..."abc") // 池子中没有就创建一个新的 if cell == nil { cell = UITableViewCell(style:...UITableViewDiffableDataSource 在 iOS 13 中引入了新的 API — Diffable Data Source,它不仅能够驱动 UITableView 和 UICollectionView...介绍 UICollectionViewCompositionalLayout 是在已有的 Item 和 Section 的基础上,增加了一个 Group 的概念。...如果是自定义布局,需要传入一个 NSCollectionLayoutGroupCustomItemProvider 来决定这个 Group 中 Item 的布局方式。
中的cell特性外,CollectionView中的Item大小和位置可以自由定义 4、通过layout布局回调的代理方法,可以动态的定制每个item的大小和collection的大体布局属性 5、更加强大一点...,完全自定义一套layout布局方案,可以实现意想不到的效果 这篇博客,我们主要讨论CollectionView使用原生layout的方法和相关属性,其他特点和更强的制定化,会在后面的博客中介绍 二、先来实现一个最简单的九宫格类布局...:@"cellid"]; 这和tableView有些类似,又有些不同,因为tableView除了注册cell的方法外,还可以通过临时创建来做: //tableView在从复用池中取cell的时候,有如下两种方法...同样,如果内容的大小超出一屏,和tableView类似是可以进行视图滑动的。...则会在一列充满后,进行第二列的布局,这种方式也被称为流式布局 三、UICollectionView中的常用方法和属性 //通过一个布局策略初识化CollectionView - (instancetype
iOS中,UICollectionView和UITableView已经有系统默认选中颜色设置,但是只有无色,蓝色,灰色,三种颜色设置,如果想要其他的颜色效果,我们可以自由自定义设置。...前言 先观赏一下典型的UITableView控件案例 ? image.png 典型的UICollectionView控件案例 ?...cell的代理方法中作如下设置: cell.selectedBackgroundView = [[UIView alloc] initWithFrame:cell.frame]; cell.selectedBackgroundView.backgroundColor...文件中重写如下方法: 示例: UITableViewCell.m - (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated{...注意的是,方案一和方案二不要重复设置。另外,二者择一的话,推荐方案一。
TableView的功能就已经很强大了,,CollectionView就是TableView的升级版,其功能更为强大。...以后的几篇博客中好好的研究一下CollectionView,由浅入深,层层深入,搞透CollectionView这个强大的组件。...UIContentContainer 是iOS8之后添加的新的协议,也是和Size Class相关的协议。该协议中的方法可以帮助你适配视图控制器上的内容,比如内容尺寸和位置等。...因为刚创建集合视图是没有尺寸或者内容的,data source和delegate是一个典型集合视图中所必须的信息。...3.在代码中实现相应的代理,和TableView非常类似 (1) 返回Section个数的方法 Objective-C - (NSInteger)numberOfSectionsInCollectionView
TableView的功能就已经很强大了,,CollectionView就是TableView的升级版,其功能更为强大。...以后的几篇博客中好好的研究一下CollectionView,由浅入深,层层深入,搞透CollectionView这个强大的组件。...UIContentContainer 是iOS8之后添加的新的协议,也是和Size Class相关的协议。该协议中的方法可以帮助你适配视图控制器上的内容,比如内容尺寸和位置等。...因为刚创建集合视图是没有尺寸或者内容的,data source和delegate是一个典型集合视图中所必须的信息。...3.在代码中实现相应的代理,和TableView非常类似 (1) 返回Section个数的方法 - (NSInteger)numberOfSectionsInCollectionView:(UICollectionView
前面两篇文章聊的UITableView和UICollectionView都是继承自UIScrollView,本篇文章就来简单聊聊UIScrollView。 ?...frame是视图在屏幕中展示的位置和大小,也就是可视区域的位置和大小。 contentSize是scrollView视图的内部内容可以滚动的区域大小,也就是scrollView视图内容的实际大小。...中断一些业务逻辑,比如视频、gif的播放(在列表拖动的时候停止播放gif和视频) - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView...上图是我在知乎首页的一个截图。 首先,整个从上而下它是一个tableView+collectionView。...(内容列表是tableView,“关注、推荐、热榜”标题栏是一个collectionView) 然后,“关注、推荐、热榜”每一个标题栏都对应一个tableView,一共有3个tableView,这三个tableView
一个很常见的需求就是在一个cell上点赞,评论等操作时,需要刷新单个cell对象,常用的方法即为: [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects...indexPathForRow:index inSection:0],nil] withRowAnimation:UITableViewRowAnimationNone]; 仅仅这行代码会引起cell上下跳动的问题...,原因是 上述刷新过程中,虽然我们已经设置UITableViewRowAnimationNone,但任然会默认添加隐式动画效果。...withRowAnimation:UITableViewRowAnimationNone]; }]; 方法2: [UIView animateWithDuration:0 animations:^{ [collectionView...performBatchUpdates:^{ [collectionView reloadItemsAtIndexPaths:@[[NSIndexPath indexPathForItem
今天深圳总公司的iOS大佬来广州,给我这个小白一对一讲解了很多iOS的相关知识,受益匪浅,就赶快记下来以免以后忘记啦~ iOS相比安卓最大的特点就是非开源,软件之间无法获取数据,对于要获取照片/麦克风等的时候均需要获取权限才有访问资格...一、关于iphoneX的适配问题 适配这个问题分为两种: 头部Nav:1、用苹果自己的组件(如左图);2、自定义写的(如右图) (如何区分:一个app的自带头部Nav只有一种颜色,且一般左边为返回,中部为文字...二、window、view与cell 每个app一般只有一个keywindow,键盘为一个window,window之间要交互非常麻烦。...排列方式,主要有以下两种:tableview(左)和collectionview(右) ?...cell像是tableview/collectionview的细胞,很多cell组成了一个tableview/collectionview(如上图橙色部分)。 ?
Reusable Reusable是一个在swift下使用的开源库。利用protocol extension结合泛型提供了一个优雅的方案来dequeueReusableCell。...使用 根据类型获取cell让你的cell声明Reusable或NibReusable协议 //如果cell定义在xib中,声明NibReusableclass MyCustomCell: UITableViewCell...或者collectionView中register tableView.register(UINib.init(nibName: "MyCustomCell", bundle: nil), forCellWithReuseIdentifier...: "MyCustomCell") 粗暴的直接获取cell就可以啦: func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath...根据类型获取xib中的UIView对象 UIView对象声明NibLoadable协议。
MJRefresh是很好用的一个刷新控件,但是如果在每个ViewController中都加入如下代码 self.tableView.header = [MJRefreshNormalHeader headerWithRefreshingBlock...Page 所以想一个办法对MJRefresh进行二次封装,在使用的时候方便调用。...MJRefresh 支持TableView,CollectionView,Scrollview,很容易联想到TableView,CollectionView都是继续Scrollview,那我们写一个Scrollview...的Category是不是就可以 接下来我们需要考虑两个问题,Category是不可以直接添加属性的,那我们怎么添加Page和刷新Block这两个属性。...所以我们在Category中声明属性 typedef void(^RefreshBlock)(NSInteger pageIndex); typedef void(^LoadMoreBlock)(NSInteger
大家好,又见面了,我是你们的朋友全栈君。 今天做了个测试,看看tableView如果实现了touchesBegan方法和实现了didSelectRowAtIndexPath点击的时候会去实现哪一个?...先附上测试的函数 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { NSLog(@"---...---"); } -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath...{ NSLog(@"llllll"); } 红色的代表tableView,蓝色的代表cell,我不管是点击cell还是点击tableView,监听到的方法都是touchesBegan。...下面是输出结果,输出的都是touchesBegan中的方法 这个是视图 而当tableView没有实现touchesBegan,当我们点击cell的时候是有反应的 以下是输出结果 视图如下所示
下面我将以第三人称的叙述方式,通过一个例子比较传统实现和最新实现的手段说明如何让列表页不再难构建。...tableview的数据源和代理协议。...reload这一行,在heightForRow代理方法中判断isExpand,返回小明已在FeedCellModel中已经计算的两个高度(初始高度和全部高度)。...CollectionView 中的一个 section 中的 cell。...{ return nil } 因为为了清晰的比较每个需求的变更,所以在demo里每个需求都有一个ViewController,搞了个基类来创建collectionView和adapter
前言 Hello, 大家好,今天准备和大家继续分享如何利用 Swift 来实现一个网易云音乐的首页;上俩篇文章文章发布以后,我收获了不少小伙伴的关注与点赞,同时也得到了一些非常有用的建议,在这里再次感谢大家的认可...在我们实际开发过程中,数据请求的操作必不可少,必须要先将数据提供给 ViewModel,然后在数据更新时重新 Reload TableView。...如图所示: image 我们知道,要为一个视图添加圆角是非常有讲究的,如果直接调用 cornerRadius 和 masksToBounds 这俩个方法设置圆角就会出现离屏渲染,况且我们的首页有很多圆角视图...但是,通过观察你会发现它的 UI 样式其实是有讲究的,就是在同一个页面中,它的第二个 item 也需要露出一部分,这该如何去实现呢!...,所以我们创建了一个基类 BaseViewCell, 用于展示 Cell 中相同的地方;然后我们在各个 Cell 中构建不同样式的 UI,利用 UICollectionView 这一神器实现了这些效果;
领取专属 10元无门槛券
手把手带您无忧上云