第4课、UITableView专题(五)

目标:

  主从表关系 : 点击“省份名称” -  显示“城市列表”

#import "MainTableViewController.h"
#import "ShiTableViewController.h"

@interface MainTableViewController ()

//省份数组
@property (strong, nonatomic) NSArray * arrSheng;
//城市字典
@property (strong, nonatomic) NSDictionary * arrShi;

@end

@implementation MainTableViewController

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self initArrayData];
}

#pragma mark - 初始化 “省、市”数组
- (void)initArrayData
{
    // 从plist文件中,读出数据
    NSBundle * bundle = [NSBundle mainBundle];
    self.arrSheng = [NSArray arrayWithContentsOfFile:[bundle pathForResource:@"provinces" ofType:@"plist"]];
    self.arrShi = [NSDictionary dictionaryWithContentsOfFile:[bundle pathForResource:@"cities" ofType:@"plist"]];
}

#pragma mark - ** 准备连线操作 **
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    S2iShiTableViewController * shiVC = segue.destinationViewController;

    //需要知道用户点击的哪一行,取出对应的数组。

    //1. 用户选中的一行
    NSInteger index = [self.tableView indexPathForSelectedRow].row;
    //2. 从省份数组中提取省份名称
    NSString * shengName = self.arrSheng[index];
    //3. 从城市字典中,查找数组。
    NSArray * arrCities = self.arrShi[shengName];
    //4. 将查找结果设置给目标控制器
    [shiVC setArrCities:arrCities];
}

#pragma mark - Table view data source

//多少行
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.arrSheng.count;
}

//单元格
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString * cellIdentifier = @"myCell";
    UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if (cell == nil)    //如果没在缓冲池找到单元格,实例化一个新的单元格
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
    }

    //显示内容
    [cell.textLabel setText:self.arrSheng[indexPath.row]];

    return cell;
}

//选中行
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"%@", indexPath);
}

@end
#import <UIKit/UIKit.h>

@interface ShiTableViewController : UITableViewController

@property (strong,nonatomic) NSArray * arrCities;

@end
#import "ShiTableViewController.h"

@interface ShiTableViewController ()

@end

@implementation ShiTableViewController

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

}

#pragma mark - Table view data source

//行数
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.arrCities.count;
}

//单元格
- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString * cellIdentifier = @"myCell";
    UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
    }

    //单元格显示内容
    cell.textLabel.text = self.arrCities[indexPath.row];

    return cell;

}

@end

  备注:

    1.  从plist文件中,读取数据。

    2.  tableViewCell中Identifier 设置成 myCell。

    3.  可以看下 Accessory 设置Cell 右边icon的几种图标。

    4.  两个控制器,建立连线后,通过

        - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender方法可以进行传值。

    

   

  

时间: 2024-10-11 03:21:39

第4课、UITableView专题(五)的相关文章

开发指南专题五:JEECG微云快速开发平台代码生成器

开发指南专题五:JEECG微云快速开发平台代码生成器 1.1. Maven开发环境搭建 在搭建jeecg的maven开发环境之前,需要先配置好本机的maven环境,并在eclipse中安装好m2eclipse插件. 1. maven版本的工程目录,代码结构如图311所示. 2. 针对本机开发环境(这里以eclipse为例),调整依赖包和项目属性 首先在工程上右键->properties,在builders选项卡中删除掉不存在或不需要的builders,如图312所示. 然后进入Java Bu

开发指南专题五:JEECG微云高速开发平台代码生成器

开发指南专题五:JEECG微云高速开发平台代码生成器 1.1. Maven开发环境搭建 在搭建jeecg的maven开发环境之前,须要先配置好本机的maven环境,并在eclipse中安装好m2eclipse插件. 1. maven版本号的project文件夹,代码结构如图311所看到的. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhbmdkYWlzY290dA==/font/5a6L5L2T/fontsize/400/fill/I0JBQ

UI标签库专题五:JEECG智能开发平台 Tabs(选项卡父标签)

mnesia在频繁操作数据的过程可能会报错:** WARNING ** Mnesia is overloaded: {dump_log, write_threshold},可以看出,mnesia应该是过载了.这个警告在mnesia dump操作会发生这个问题,表类型为disc_only_copies .disc_copies都可能会发生. 如何重现这个问题,例子的场景是多个进程同时在不断地mnesia:dirty_write/2 mnesia过载分析 1.抛出警告是在mnesia 增加dump

搜索引擎算法研究专题五:TF-IDF详解

搜索引擎算法研究专题五:TF-IDF详解 2017年12月19日 ? 搜索技术 ? 共 1396字 ? 字号 小 中 大 ? 评论关闭 TF-IDF(term frequency–inverse document frequency)是一种用于资讯检索与资讯探勘的常用加权技术.TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度.字词的重要性随著它在文件中出现的次数成正比增加,但同时会随著它在语料库中出现的频率成反比下降.TF-IDF加权的各种形式常被搜

第4课、UITableView专题(三)

一.本次小例子截图: 二.代码如下: #import <Foundation/Foundation.h> @interface Product : NSObject //标题 @property (strong, nonatomic) NSString * title; //描述 @property (strong, nonatomic) NSString * desc; //图片 @property (strong, nonatomic) NSString * imageName; @end

第4课、UITableView专题(一)

一. 创建项目 storyboard . 二. 往ViewController上拖一个UITableView上去. 此时,建立连线,右键TableView,设置datasource,到Controller上. 三. 在.h文件中,UIViewController要遵守UITableViewDataSource这个协议. 四. 如果此时,Run, 就会报错,可以看下错误信息. 提示没有实现numberOfSectionsInTableView方法. 五. 在.m文件中,整理下重要和必须的几个方法:

第4课、UITableView专题(四)

重构下单元格方法 #pragma mark 单元格内容 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { // UITableViewCell * cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:nil];

第4课、UITableView专题(二)

对TableView进一步理解 1.  创建项目.-- 省市级联小例子. 2.  添加.plist文件.可以理解为数据字典.键值对(Key - Value) 2.1 cities.plist  - 城市 2.2 provinces.plist -  省份 3.  常用方法: 3.1  QQ,微信,通讯录常见的,列表右侧有:ABCDE... 字样,就是如下方法. - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView

[.NET领域驱动设计实战系列]专题五:网上书店规约模式、工作单元模式的引入以及购物车的实现

一.前言 在前面2篇博文中,我分别介绍了规约模式和工作单元模式,有了前面2篇博文的铺垫之后,下面就具体看看如何把这两种模式引入到之前的网上书店案例里. 二.规约模式的引入 在第三专题我们已经详细介绍了什么是规约模式,没看过的朋友首先去了解下.下面让我们一起看看如何在网上书店案例中引入规约模式.在网上书店案例中规约模式的实现兼容了2种模式的实现,兼容了传统和轻量的实现,包括传统模式的实现,主要是为了实现一些共有规约的重用,不然的话可能就要重复写这些表达式.下面让我们具体看看在该项目中的实现. 首先