首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

UITableView 组件化

[1240] 源起 在 iOS 开发中,UITableView 可以说是最常用的控件。几行代码,实现对应方法,系统就会给你呈现一个 60 帧无比流畅的列表,让初学者成就感爆棚。...但也不是完美的:套路都是类似的,即使你熟练掌握了这些所谓的设计原则,在实际操作中仍有大量的重复代码。...数据源和 UI 不绑定 当 model 变化时,我们往往需要通过当前 model 位置反推出 cell 在 UITableView 中的位置(即 indexPath),然后做相应的更新处理,反之亦然。...M80TableViewCellComponent 顾名思义,他们分别对应 UITableView,Section 和 UITableViewCell。...: - (void)configure:(UITableViewCell *)cell 和 UITableView 联动 定义完组件后,我们只需要按照顺序将组件加入父组件中,即可完成和 UITableView

1.5K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    UITableView基础1. UITableView的作用2. UITableView的常用属性3. tableView展示数据三部曲4. UITableViewStyleGrouped样式5. U

    UITableView的作用 以垂直滚动方式显示数据列表。 UITableView 的两种内置样式:UITableViewStylePlain 和UITableViewStyleGrouped 。...2.5 UITableViewCell的selectionStyle属性可设置被选中时的背景颜色 属性名称 作用 UITableViewCellSelectionStyleNone 没有颜色 UITableViewCellSelectionStyleBlue...() 3.2 设置数据源 self.tableView.dataSource = self; 3.3 实现数据源方法 总共多少组 每组多少行 每组中每行的内容...{ return 10; } //返回每一组的每一行显示什么内容 - (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath...但是可以在初始化的时候直接定义。

    1K40

    iOS-UI控件之UITableView(一)

    的两种样式只读属性 只读属性,在代码中不能修改 UITableViewStylePlain 一组显示Section = 1; UITableViewStyleGrouped 分组显示Section...),而且每一行用的不一定是同一种UITableViewCell,所以一个UITableView可能拥有不同类型的UITableViewCell,对象池中也会有很多不同类型的UITableViewCell...,那么UITableView在重用UITableViewCell时可能会得到错误类型的UITableViewCell 解决方案:UITableViewCell有个NSString *reuseIdentifier...属性,可以在初始化UITableViewCell的时候传入一个特定的字符串标识来设置reuseIdentifier(一般用UITableViewCell的类名)。...UITableViewCell对象 不优化时内存分析 不优化的时候 离开可视范围就销毁 频繁的开辟内存,销毁内存 - (UITableViewCell *)tableView:(UITableView

    1.8K130

    iOS学习——UITableViewCell两种重用方法的区别

    今天在开发过程中用到了UITableView,在对cell进行设置的时候,我发现对UITableViewCell的重用设置的方法有如下两种,刚开始我也不太清楚这两种之间有什么区别。...直到我在使用方法二进行重用的时候,具体实现代码如下,其中CJMeetingReplyBasicCell是我自定义的UITableViewCell类型,但是在运行的时候每次都在调用 CJMeetingReplyBasicCell...源码的UITableView.h中对两者的解释如下,我们可以看到方法二是在iOS 6.0中开始推出的新方法,在对方法二的解释中,我们注意标红的部分的意思是假设我们已经注册了标识符,这里我们猜测可能是我们需要对标识符进行注册...//UITableView.h - (nullable __kindof UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)...第二个需要注意的地方是,在该页面下面有一个Important的提示如下图,该提示就说明了方法二的正确使用方法。这里解释说要先进行注册我们自定义或者通过nib的类和标识符,然后再使用方法二进行重用。

    1.1K70

    iOS开发之UITableView联动实现城市选择器

    在 iOS开发之城市选择器一文中用两列的UIPickerView实现了城市选择器,今天用两个UITableView来实现一下,首先这种联动在很多地方用得上,而且方法有好几种,我这里选择了个人喜欢的一种方式...这种方式总体思路如下: 1、添加两个UITableView到当前控制器中,分别设置它们的的尺寸,然后拖线到控制器中 2、左边的表格设置数据源和代理为当前控制器,然后显示数据,右边的表格也设置数据源为当前控制器...3、监听左边表格控制器的点击事件,在它的点击事件中刷新右边的表格 这时候就有问题了,一个控制器要成为2个UITableView的数据源和代理,怎么办?...—— 在数据源和代理方法中,进行判断 if (self.leftTableView== tableView) {} else{} 具体步骤: 1、添加2个UITableView,设置约束...添加和准备工作.png 2、在控制器中实现功能,具体代码如下,注释非常详细: #import "ViewController.h" @interface ViewController () <UITableViewDataSource

    2.2K60

    RunLoop总结:RunLoop的应用场景(三)滚动视图流畅性优化

    为了表现出卡顿的效果,我先自己实现了一下Cell,主要示例代码: - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath...(这一点,相信大家都知道,要尽量避免在主线程中执行,一般都是创建一个子线程来执行,然后再回到主线程) 2.动态计算UITableViewCell的高度,时间过久 在iOS7之前,每一个Cell的高度,...关于这一点,我以前的做法是在Cell中定义一个public方法,用来计算Cell高度,然后计算完高度后,将高度存储在Cell对应的Model中(Model里定义一个属性来存高度),然后在渲染Cell时,...这样在为Cell各个子控件赋值时,仅仅是取值、赋值,在计算Cell高度时,也仅仅是加法运算。 3.界面中背景色透明的视图过多 为什么界面中背景色透明的视图过多会影响UITableView的流畅?...简单说明一下,就是屏幕上显示的所有东西,都是通过一个个像素点呈现出来的。而每一个像素点都是通过三原色(红、绿、蓝)组合呈现出不同的颜色,最终才是我们看到的手机屏幕上的内容。

    2.2K41

    iOS开发中行高灵活可变的UITableView的性能优化

    iOS开发中行高灵活可变的UITableView的性能优化 一、UITableView的构建原理         在新闻类,电商类等应用中,应用着大量的图文混排视图,在表视图UITableView中,...在开发中通常会遇到一些十分复杂的界面,而这些界面中cell的高度都是需要通过请求到的数据动态改变的,每个cell都要写复杂的尺寸计算代码十分令人心烦。...在iOS7系统之后,UITableView类中增加了一个estimatedRowHeight属性,顾名思义,这个属性是设置UITableViewCell中的大约行高值。...这个值设置之后,开发者无需设置rowHeight属性,也不需要实现heightForRowAtIndexPath方法,系统会自动根据UITableViewCell中contentView的约束来计算自己的行高...,如果开发者需要精准这个滚动条的配置,可以在如下代理方法中返回具体cell的估计行高。

    2K20

    iOS-UITableView 详解(一)

    iOS-UITableView 详解 (一) ✨建议收藏,用到时候一查就明白了 UITableView可以说是iOS开发中最重要的控件之一,它的使用非常广泛,今天我们来学习UITableView的使用...分组样式UITableViewStyleGrouped UITableViewCell UITableView中每行都是一个UITableViewCell,UITableViewCell的样式我们可以通过...textLabel,左下方显示detailTextLabel(默认灰色),imageView可选(显示在最左边) }; 简单使用 接下来我们先来完成一个简单的UITableView的使用 首先看一下数据结构关系...[arrayM addObject:[self carGroupWithDict:dict]]; } return arrayM; } @end 模型创建好了,我们就可以把他们显示在UITableView...-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    1.4K50

    【iOS7一些总结】9、与列表显示(在):列表显示UITableView

    列表显示,顾名思义它是在一个列表视图的形式显示在屏幕上的数据的内容。于ios在列表视图UITableView达到。这个类在实际应用中频繁,是很easy理解。...UITableView定义在头文件UITableView.h中,详细的定义能够查看官方文档;从定义中能够看出,UITableView继承自UIScrollView类,因此在支持方便地显示列表数据的同一时候...在详细的使用过程中,能够创建一个独立的UITableView,也能够直接创建一个UITableViewController。...在新生成的ViewController.m文件里重写loadView方法,新建一个UITableView视图。 (别忘了把alloc的视图在dealloc函数中释放。)...在代理方法中能够实现创建新的视图控制器并控制其载入到屏幕上。

    1.9K40

    【IOS开发基础系列】Table View开发专题

    2.2 使用技巧 2.2.1 UITableViewCell去掉点击效果         相当于Android中的ListView的selector设置成空/透明的:     1.XIB设置         ...解决方案:           尽量将子视图的layout操作放到layoutSubviews方法中;另外,可以在cell初始化时手动设置宽度: - (instancetype) initWithStyle...2.4.1.2 不要重复创建不必要的table cell         前面说了,UITableView只需要一屏幕的UITableViewCell对象即可。...当然,最佳的解决办法还是继承UITableViewCell,并在其drawRect:中自行绘制: - (void) drawRect: (CGRect)rect {     if (image) {        ...,优化时无意中解决了此问题,原来的调用方法是在A函数中调用UIGraphicsGetImageFromCurrentImageContext(在C函数中)生成UIImage,然后传递给B函数去处理,这样内存会暴涨

    38120

    iOS开发之BLE(二)——外设连接与断开

    在iOS开发之BLE(一)——理论知识一文中,主要对iOS开发中BLE的基本理论知识进行了介绍,本文以中心模式为例讲解蓝牙的连接过程,并进行案例实践。...发现外设CBPeripheral后,对其进行标记或者存储到外设数组中 选择外设进行连接 断开连接 案例 本文案例以一个UITableView展示周围可用的外设,通过点击UITableViewCell选择外设进行蓝牙的连接...StoryBoard界面.png ViewController 代码 重点是CBCentralManagerDelegate中的代理方法,这些方法会随着CBCentralManager方法的调用进行对应的回调...= selPeripheral //调用connect就会回调代理中连接外设结果的方法 self.centralManager.connect(self.peripheral...后台打印.png 注意问题 一定要真机测试 断开的时候,一定要将 self.peripheral赋值为nil,否则第一次连接之后就再也连接不上了

    3.1K20

    解决UITableView中Cell重用机制导致内容出错的方法总结

    UITableView继承自UIScrollview,是苹果为我们封装好的一个基于scroll的控件。...上面主要是一个个的UITableViewCell,可以让UITableViewCell响应一些点击事件,也可以在UITableViewCell中加入UITextField或者UITextView等子视图...UITableView中的cell可以有很多,一般会通过重用cell来达到节省内存的目 的:通过为每个cell指定一个重用标识符(reuseIdentifier),即指定了单元格的种类,当cell滚出屏幕时...,会将滚出屏幕的单元格放入 重用的queue中,当某个未在屏幕上的单元格要显示的时候,就从这个queue中取出单元格进行重用。...比如,当一个cell含有一个 UITextField的子类并被放在重用queue中以待重用,这时如果一个未包含任何子视图的cell要显示在屏幕上,就会取出并使用这个重用的 cell显示在无任何子视图的cell

    2.5K50

    iOS 架构组件:让你的 TableView 优雅起来

    >协议方法来配置布局逻辑,面向协议设计模式在苹果的代码设计中很常见,它能适应大部分的业务场景且足够灵活。...@end 然后在UITableView相关各个协议方法里从NSArray layoutArray数组中拿到数据配置就行了,如此,开发者只需要关心如何构建layoutArray...并且,一个CellLayout是解决不了问题的,因为配置UITableView可能需要UITableViewCell的一些数据,也需要一些通用的方法来告知UITableViewCell何时配置数据刷新UI...取个例子,若你在UIViewController里面写了一个UITableView,然后使用该组件配置数据,可以明确的是组件将和中应该多考虑一下,UITableViewCell中会不会有大量的事件需要传递到最外层的业务,比如跳转界面、网络请求等就可以直接在UITableViewCell

    1.8K40

    UITableView增加和删除、移动

    复习一下: 1、在控制器上添加一个UITableView,  暂时该UITableView控件变量名命名为为tableView, 设置控件代理,实现控制器的UITableViewDataSource,...UITableViewDelegate协议; 2、tableView控件的editing属性默认是NO, 并且UITableViewCell默认情况下没有删除和增加功能。    ...在代理方法里面做相应处理,就可以实现删除功能,代码如下: //代理方法,实现后可以进行增加单元行或者删除单元行 - (void)tableView:(UITableView *)tableView commitEditingStyle...3、UITableViewCell的移动:实现一个代理方法,就可以进行单元格的移动: //实现此方法,就可以移动单元格, 方法里面是让数据和样式移动保持一致 - (void)tableView:(UITableView...按住想要移动的UITableViewCell的哪个三横图标,可以进行移动 ?

    1.8K30
    领券