最近在忙着公司的事情,很少有时间来写东西,大多数时候是在技术交流。昨天有一个自学ios的同学问了我一个问题,怎么利用数据对tableview的每一行进行混插。正常来说,大多数App的数据类型在每一个页面上都是一致的,但是如果涉及到数据类型不一致的,确实让人很难办,我给了他的思路是这样的:
self.tablearr =
[[NSMutableArray alloc]init];
//顶层数据源datasource
self.arrone = [[NSMutableArrayalloc]init]; //二层数据源
根据数据类型的不同定义不同的modle,存放不同的数据
例:
Mod1 * mod1 = [[Mod1alloc]initWithTitle:@"28(周一)"image:@"b.png"infomation:@"王老五生日"];
Mod2 * mod2 = [[Mod2alloc]initWithTitle:@"01(周二)"date:@"12:20"infomation:@"今晚去吃饭"];
这是预先写好放在数组里面测试初始效果的。
一般不用的数据都有不用的标识符,我举个例子,tag = 1的时候
在网络请求就把遍历的数据放到Mod1里面
写一个大modle,在大modle的网络请求时候判断数据的tag,tag = 1就继续请求Mod1类型的数据
Mod * model = [_tablearr objectAtIndex:indexPath.row];
if (modle.tag == 1)
{
[NetworkHandlerconnectNetGETDataWithURLString:model.url completion:^(id result) {
for (int i = 0 ;i < [result count] ; i++)
{
Mod1* mod = [[Mod1alloc]init];
mod.title = [result objectForKey:@"title"];
mod.image = [result objectForKey:@"image"];
mod.infomation = [result objectForKey:@"infomation"];
[_arrone addobject: mod];
} 这样就把tag = 1 情况下得数据全放到Mod1里面去了。
[tabel reloadData];
}];
}
之后关键的是在重用池里进行判断:
判断什么呢?判断的是_arrone数组的内容
蓝色字体就是判断数组内容的类型
if([_arrone[indexPath.row]isKindOfClass:[Mod1class]]) {
CellOne * cell = [tableView dequeueReusableCellWithIdentifier:@"cell1"];
Mod1 * mod = (Mod1 *)[_arroneobjectAtIndex:indexPath.row];
[cellsetValuesWithModledd:mod];
return cell;
}
if ([_arrone[indexPath.row]isKindOfClass:[Mod2class]]) {
CellTwo * cell = [tableView dequeueReusableCellWithIdentifier:@"cell2"];
Mod2* mod = (Mod2 *)[_arroneobjectAtIndex:indexPath.row];
[cellsetValuesWithModledd:mod]; // 把modle里面的值传到Cell里面进行赋值
return cell;
}
效果是这样的:(绿色的是mod1数据,红色的是mod2)
这篇博客探讨了如何在iOS开发中处理TableView的混插问题,即在同一个TableView中展示不同数据类型的行。作者建议根据数据类型创建不同的Model,并提供了一种通过多个数据源数组实现混插的方法。

6130

被折叠的 条评论
为什么被折叠?



