iOS开发—tableview的混插

这篇博客探讨了如何在iOS开发中处理TableView的混插问题,即在同一个TableView中展示不同数据类型的行。作者建议根据数据类型创建不同的Model,并提供了一种通过多个数据源数组实现混插的方法。

最近在忙着公司的事情,很少有时间来写东西,大多数时候是在技术交流。昨天有一个自学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)









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值