一个界面多个tableView相关联(例:省市区)

刚开始学习tableView的时候,一直以为一个页面只能有一个tableView,后来,当接触到要在一个页面建立多个tableView时候,才发现自己是多么的OUT了!下面就一个界面建立多个tableView相关联(以省市区为例)进行一个简要的分析:

在这之前,我先在工程上添加了一个自己准备好的txt格式的文本:


area.png
//下面的方法全部在根视图下进行,同时系统为MRC:
//1.第一步:声明定义属性:
@property(nonatomic, retain)NSMutableArray *dataProArray;
@property(nonatomic, retain)NSMutableArray *dataCityArray;
@property(nonatomic, retain)NSMutableArray *dataZoneArray;
@property(nonatomic, retain)UITableView *proTableView;
@property(nonatomic, retain)UITableView *cityTableView;
@property(nonatomic, retain)UITableView *zoneTableView;
//2.第二步:由于是MRC模式下,需要做dealloc释放操作:
- (void)dealloc
{
[_dataProArray release];
[_dataZoneArray release];
[_dataCityArray release];
[_proTableView release];
[_cityTableView release];
[_zoneTableView release];
[super dealloc];
}
//3.第三步:需要对传入的txt文件,进行解析:
NSString *string = [NSString stringWithContentsOfFile:@"/Users/dllo/Desktop/省市区的选择/省市区的选择/area.txt" encoding:NSUTF8StringEncoding error:nil];
NSArray *array = [string componentsSeparatedByString:@"\n"];
self.dataProArray = [NSMutableArray array];
self.dataZoneArray = [NSMutableArray array];
self.dataCityArray = [NSMutableArray array];
for (NSString *str in array) {
    if (![str hasPrefix:@" "]) {
        //创建省的字典:(包含一个省的完整信息)
        NSMutableDictionary *proDic = [NSMutableDictionary dictionary];
        //设置省名字的键值对:
        [proDic setObject:str forKey:@"proName"];
        //创建对应该省的城市数组:
        NSMutableArray *cityArray = [NSMutableArray array];
        [proDic setObject:cityArray forKey:@"cityArray"];
        //添加省的字典
        [self.dataProArray addObject:proDic];
    }
    else if (![str hasPrefix:@"    "])
    {
        //取出存放的省字典:
        NSMutableDictionary *proDic = [self.dataProArray lastObject];
        //创造当前城市的字典:
        NSMutableDictionary *cityDic = [NSMutableDictionary dictionary];
        //获取当前城市的数组:
        NSMutableArray *cityArray = [proDic valueForKey:@"cityArray"];
        //创建城市名字的键值对:
        [cityDic setObject:str forKey:@"cityName"];
        //创建该城市的数组键值对:
        NSMutableArray *zoneArray = [NSMutableArray array];
        [cityDic setObject:zoneArray forKey:@"zoneArray"];
        //添加
        [cityArray addObject:cityDic];
    }
    else
    {
        //取出存放的省字典:
        NSMutableDictionary *proDic = [self.dataProArray lastObject];
        //获取城市所在的数组:
        NSMutableArray *cityArray = [proDic objectForKey:@"cityArray"];
        //获取城市字典:
        NSMutableDictionary *cityDic = [cityArray lastObject];
        //把当前的区数组取出:
        NSMutableArray *zoneArray = [cityDic objectForKey:@"zoneArray"];
        //添加:
        [zoneArray addObject:str];
    }
}
//4.第四步:初始化tableView并注册对应的cell以及签订协议,制定协议代理人:
//初始化省的proTableView:
self.proTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 20, self.view.frame.size.width / 3.0, self.view.frame.size.height - 20) style:UITableViewStylePlain];
self.proTableView.delegate = self;
self.proTableView.dataSource = self;
[self.view addSubview:_proTableView];
[_proTableView release];
//初始化市的cityTableView
self.cityTableView = [[UITableView alloc] initWithFrame:CGRectMake(self.view.frame.size.width / 3.0, 20, self.view.frame.size.width / 3.0, self.view.frame.size.height - 20) style:UITableViewStylePlain];
self.cityTableView.delegate = self;
self.cityTableView.dataSource = self;
[self.view addSubview:_cityTableView];
[_cityTableView release];
//初始化区的zoneTableView
self.zoneTableView = [[UITableView alloc] initWithFrame:CGRectMake(self.view.frame.size.width / 3.0 * 2.0, 20, self.view.frame.size.width / 3.0, self.view.frame.size.height - 20) style:UITableViewStylePlain];
self.zoneTableView.delegate = self;
self.zoneTableView.dataSource = self;
[self.view addSubview:_zoneTableView];
[_zoneTableView release];

//注册cell
[self.proTableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"proCell"];
[self.cityTableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cityCell"];
[self.zoneTableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"zoneCell"];
//5.第五步:代理方法的实现:
//(1)设置cell的数量(必须实现方法):

因为我们有三个tableView,所以要考虑不同的tableView需要对应不同的cell数量值:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
//判断当前所点击的表视图tableView是哪一个:
if (tableView == _proTableView) {
return self.dataProArray.count;
}
else if (tableView == _cityTableView)
{
return self.dataCityArray.count;
}
else
{
return self.dataZoneArray.count;
}
}

//(2)设置cell的内容(必须实现方法):

我们也要考虑到不同的tableView所对应的每个cell的内容是不同的,固然需要进行一次if的判断:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//判断当前表视图tableView是哪个表视图
if (tableView == _proTableView) {
//创建对应的cell
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"proCell"];
//获取到当前所点击的省字典
NSMutableDictionary *proDic = [self.dataProArray objectAtIndex:indexPath.row];
//给省表视图中的cell.textLabel.text赋值
cell.textLabel.text = [proDic objectForKey:@"proName"];
cell.textLabel.font = [UIFont systemFontOfSize:13];
return cell;
}
else if (tableView == _cityTableView)
{
//创建对应的cell
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cityCell"];
//获取到当前所点击的城市字典
NSMutableDictionary *cityDic = [self.dataCityArray objectAtIndex:indexPath.row];
//给城市表视图中的cell.textLabel.text赋值:
cell.textLabel.text = [cityDic objectForKey:@"cityName"];
cell.textLabel.font = [UIFont systemFontOfSize:13];
return cell;
}
else
{
//创建对应的cell
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"zoneCell"];
//给区的表视图中的cell.textLabel.text赋值:
cell.textLabel.text = [self.dataZoneArray objectAtIndex:indexPath.row];
cell.textLabel.font = [UIFont systemFontOfSize:13];
return cell;
}
}

(3)设置点击方法:

为了满足当点击省表视图中的省时,在市的表视图中显示对应的省里的市名单(同点击市,显示区名单), 我们添加一个tableView的点击方法:
由于不同点击不同的表视图,固然我们也要进行一次if的判断,到底点击的是哪一个表视图:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
//判断当前所点击的表视图是哪个
if (tableView == _proTableView) {
//获取当前点击的哪个省:
NSMutableDictionary *proDic = [self.dataProArray objectAtIndex:indexPath.row];
//获取当前省对应的城市数组:
NSMutableArray *cityArray = [proDic objectForKey:@"cityArray"];
//为城市数据源赋值:
self.dataCityArray = cityArray;
//刷新城市视图
[self.cityTableView reloadData];
}
else if (tableView == _cityTableView) {
//获取到当前所点击的城市
NSMutableDictionary *cityDic = [self.dataCityArray objectAtIndex:indexPath.row];
//获取到具体的区数组,给区数据源赋值:
NSMutableArray *zoneArray = [cityDic objectForKey:@"zoneArray"];
self.dataZoneArray = zoneArray;
//刷新区视图:
[self.zoneTableView reloadData];
}
}

//最后给大家呈现一下系统模拟器iPhone 6s下程序的效果图:
//(1)刚运行程序,没有点击时的样式:
ABB6887E-E247-48E4-8B4B-3B12ABE90560.png
//(2)当点击一个省时的样式:
2753593C-D219-4FAC-BF86-2D6E098905D8.png
//(3)当点击一个市时的样式:
B3F3A730-87BC-4CB1-8AB2-1B4321BACF1D.png
注:文件解析时,只想把省市区的样式给大家展示出来,没有将number给减去,请读者见谅!!想要去掉数字的方法:文本和数字之间有一个空格,当你取出每一个对应的数据时,可以添加一个[string componentsSeparatedByString:@" "]的方法获取一个数组!我们所需要的数据源是数组中的第一个元素!这只是一个简要的分析,如果有更好的方法,读者可以给我评论留言,感谢!!!
//添加内容:

去掉数字的代码:

CA4DAAF3-4EE6-4BA9-9DA6-5E2C3030AC00.jpg
EC831CE8-F96C-47A8-83A1-B0B1114063EE.jpg
785F6F76-7FBD-4EAB-B725-9733727C51B6.jpg

最终的效果图:

7FC19A00-2F09-4D9F-AD01-73FA3BC164DA.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,711评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,079评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,194评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,089评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,197评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,306评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,338评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,119评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,541评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,846评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,014评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,694评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,322评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,026评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,257评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,863评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,895评论 2 351

推荐阅读更多精彩内容