处理数据源(根据条目字数多少 ,动态显示一行里有多少个条目,类似天猫搜索历史)

原理:处理数据源

1.计算条目一的字符串所占宽度

#import "NSString+Extension.h"  //NSString 分类(添加新功能:根据字号计算字符串宽度)

#pragma mark -根据字号来计算字符串的宽度

- (float) widthWithFont: (UIFont *) font{

CGRect textRect = [self boundingRectWithSize:CGSizeMake(MAXFLOAT, font.pointSize)                 options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading

attributes:@{NSFontAttributeName:font}

context:nil];

return ceil(textRect.size.width);

}

2.加上“   ”中间一段空格的宽度

3.再加上条目二字符串的宽度

4.如果宽度超过屏幕宽度,则将数据换到下一行中(flag = 0;)数据源单条数据从新开始拼接多个条目

-(void)testDealDataSource{

NSArray * dataArray = @[@"全面面包(100g)",@"全面面包(200g)",@"秘制红烧肉(300g)",@"全面面包(400g)",@"蜜汁红烧排骨(500g)"];

//    NSArray * dataArray = @[@"面包(100g)",@"面包(200g)",@"红烧肉(300g)",@"全面面包(400g)",@"蜜汁红烧排骨(500g)"];

NSMutableArray * realDataArray = [NSMutableArray array];

NSMutableString * mustr = [NSMutableString string];

NSInteger flag = 0;

NSString * intervalStr = @"     ";

CGFloat interval = [intervalStr widthWithFont:[UIFont systemFontOfSize:13]];

for(int i = 0; i < dataArray.count; i++){

NSString * sr = dataArray[i];

CGFloat width = [sr widthWithFont:[UIFont systemFontOfSize:13]];

CGFloat widthTotal = [mustr widthWithFont:[UIFont systemFontOfSize:13]];

if(JYEScreenWidth - (width + interval + widthTotal) > 0.001 && flag <= 2){

if(i != 0){

[mustr appendString:intervalStr];

}

flag ++;

[mustr appendString:sr];

}else{

flag = 0;

[realDataArray addObject:mustr];

mustr = [NSMutableString string];

[mustr appendString:sr];

}

if(i == dataArray.count - 1){

[realDataArray addObject:mustr];

}

}

self.dataSourceArray = realDataArray;

[self.tableView reloadData];

for(NSString * object in realDataArray){

NSLog(@"%@",object);

}

}

时间: 2024-10-25 00:14:03

处理数据源(根据条目字数多少 ,动态显示一行里有多少个条目,类似天猫搜索历史)的相关文章

RecyclerView上下拖动条目排序,左右划出屏幕删除条目的最简单的实现

效果图 参考 RecyclerView的拖动和滑动 第一部分 :基本的ItemTouchHelper示例 概述: ItemTouchHelperAdapter:(★) RecyclerListAdapter需要实现这个接口, RecyclerListAdapter通过ItemTouchHelperAdapter的onItemMove和onItemDismiss方法来完成条目移动.条目消除的操作,并且通过notifyItemMoved()和notifyItemRemoved()来通知adapter

实践四

一.概述 ELF是一种用于二进制文件.可执行文件.目标代码.共享库.和核心转储的标准文件格式.也是linux下的主要可执行文件格式 ELF文件由四部分组成,分别是ELF头(ELF header).程序头表(program header table).节(section)和节头表(section table header)ELF header格式代码如下:#define EI_NIDENT typedef struct elf32_hdr{ unsigned char Elf32_Half Elf

巧用 即刻搜索事件 input propertychange 监听输入框字数

实时监听输入框的字数,大于200时,不再输入. 即时搜索: propertychange(ie)和input事件(常用) input是标准的浏览器事件,一般应用于input元素,当input的value发生变化就会发生,无论是键盘输入还是鼠标黏贴的改变都能及时监听到变化 propertychange,只要当前对象属性发生改变.(IE专属的) <div class="container js_container"> <div class="weui-cells

了解LDAP协议、数据结构与条目组件

提供:ZStack云计算 内容介绍 LDAP, 全称为轻量级目录访问协议,是一项开放协议,用于通过分层目录结构对数据进行存储与检索.LDAP是一种灵活的解决方案,适用于定义各类条目及相关性质. 对大多数用户而言,LDAP似乎难于理解--因为其使用专项术语,采用多种不太常见的缩写,且常常作为大型组件交互系统中的组成部分使用.在本教程中,我们将介绍LDAP基础概念,帮助大家顺利上手这套方案. 目录服务是什么? 目录服务用于通过键-值类型格式存储.整理及表达数据.一般来讲,目录会面向查找.搜索以及读取

限制内部地址NAT转换条目

限制内部地址NAT转换条目 在配置NAT时有一条命令是限制主机的NAT转换条目,可以分别限制所有主机.单个主机.匹配ACL主机的NAT转换条目.虽然从理论上讲,NAT表中的转换条目的数量没有限制:但是实际上,内存和CPU或者可用地址范围或端口空间都会对转换条目数量有限制.每一个NAT转换条目大约用160字节的内存.在有些情况下,为了性能或者策略等原因,需要对条目数量进行限制.限制NAT转换条目的命令格式如下: Router(config)#ip nat translation max-entri

tableView 数据源(dataSource)和代理(delegate)

UITableView的数据源(dataSource)和代理(delegate) UITableView需要一个数据源(dataSource)来显示数据,UITableView会向数据源查询一共有多少行数据以及每一行显示什么数据等.没有设置数据源的UITableView只是个空壳.凡是遵守UITableViewDataSource协议的OC对象,都可以是UITableView的数据源. 通常都要为UITableView设置代理对象(delegate),以便在UITableView触发一下事件时做

多样化条目RecyclerView,以及多样化动画点击效果(附源码)

RecyclerView是support-v7包中的新组件, 是一个强大的滑动组件. 与经典的ListView相比, 同样拥有item回收复用的功能, 直接把viewholder的实现封装起来, 用户只要实现自己的viewholder就可以了, 该组件会自动帮你回收复用每一个item. 它不但变得更精简, 也变得更加容易使用, 而且更容易组合设计出自己需要的滑动布局. RecyclerView出世有段时间了, 我也把我的项目中的ListView替换成了RecyclerView, 只是, Recy

ListView条目的侧拉删除

功能实现:类似QQ聊天记录中条目,左滑,可以删除该条目的功能:后续可以在自己的项目中添加该功能. 步骤一: (1)定义主布局,里面包含一个简单的ListView:命名id="lv": (2)自定义类继承FrameLayout,其布局为: 实现线性布局的右侧添加一个小布局(类似一个按钮,用来当条目向左滑后显示出来:并实现点击删除该条目) 1.整个线性布局为:前面先布局好后面要显示的:LinearLayout的布局包含一个要描述的文本(如:删除,发送短信等功能类的文字描述):在后面布局:也

listview加载不同条目

public class NewsAdapter extends BaseAdapter { Context context; List<NewsDataBean.DataBean> list; private final int TYPE_VIDEO = 0; private final int TYPE_IMAGE_THREEE = 1; private final int TYPE_IMAGE_ONE = 2; private final int TYPE_NORMAL = 3; pub