添加索引(IOS开发)

索引是用来辅助查询。

原则:

- 索引标题不能与显示的标题完全一样;

- 索引应该具有一定的代表性,能够代表一个数据集合;

- 如果采用了索引列表视图,一般情况下就不再使用扩展视图。(容易点到)

会重新到的数据源方法:

tableView: numberOfRowsInSection: ------获取某节的行数

tableView:cellForRowAtIndexPath: -------Cell数据的实现

numberofSectionInTableView: ----------获取节数

tableView:titleForHeaderInSection: --------节标题

sectionIndexTitlesForTableView: --------获取索引

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    NSBundle *bundle = [NSBundle mainBundle];
    NSString *plistPath = [bundle pathForResource:@"team_dictionary"
                                           ofType:@"plist"];

    // 获取属性列表文件中的全部数据
    self.dicData = [[NSDictionary alloc] initWithContentsOfFile:plistPath];
    NSArray *tempList = [self.dicData allKeys];
    // 对key进行排序
    // selector为SEL类型,sortedArrayUsingSelector方法的参数必须是selector
    self.listGroupname = [tempList sortedArrayUsingSelector:@selector(compare:)];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

#pragma mark 重写数据源方法
- (NSInteger) tableView: (UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // 按照节索引从小组名数组中获得组名
    NSString *groupName = [self.listGroupname objectAtIndex:section];
    // 将组名作为key,从字典中取出球队数组集合
    // 因为存储的时候是哈希结构
    NSArray *listTeams = [self.dicData objectForKey:groupName];
    // 这一节一共有多少球队
    return [listTeams count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"CellIdentifier";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
    }

    // 获得选择的节 A组即第1节
    NSUInteger section = [indexPath section];
    // 获得选择节中选中的行索引 -- A组第1、第2.。。
    NSUInteger row = [indexPath row];
    // 按照节索引从小组名数组中获得组名 -- A组
    NSString *groupName = [self.listGroupname objectAtIndex:section];
    // 将组名作为key,从字典中取出球队数组集合
    NSArray *listTeams = [self.dicData objectForKey:groupName];

    cell.textLabel.text = [listTeams objectAtIndex:row];
    return cell;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // 该节行数
    return [self.listGroupname count];
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    // 该节的节头
    NSString *groupName = [self.listGroupname objectAtIndex:section];
    return groupName;
}

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
{
    // 添加索引
    NSMutableArray *listTitles = [[NSMutableArray alloc] initWithCapacity:[self.listGroupname count]];
    // 把A组改为A
    for (NSString *item in self.listGroupname) {
        NSString *title = [item substringToIndex:1]; // 只获取第一个字符
        [listTitles addObject: title];  // 追加的字符串数组的最后一个位置
    }
    return listTitles;
}

@end

注意:

在故事版要配置好tableview的委托协议!!!!

时间: 2024-08-07 15:58:15

添加索引(IOS开发)的相关文章

【IOS】IOS开发问题解决方法索引(一)

IOS开发问题解决方法索引(一) 1       Xcode工程调试时无法命中断点的问题 若没有勾选LLVM Compiler 1.6 –> CodeGeneration –> Generate Debug Symbols 一项,则程序调试时无法命中断点. 2       Xcode调试时查看变量的几种方法 Xcode如何查看内存中的数据 http://blog.csdn.net/evgd2288/article/details/8995779 Xcode的Debug中查看数据细节的方法 ht

【IOS】IOS开发问题解决方法索引(二)

IOS开发问题解决方法索引(二) 1       不使用ARC编译,-fno-objc-arc ios5 选择了ARC但是不使用ARC编译,-fno-objc-arc http://leobluewing.iteye.com/blog/1384797 http://blog.cnrainbird.com/index.php/2012/03/13/object-c_kai_fa_zhong_hun_he_shi_yong_huo_bu_shi_yong_arc/ 2       SIGABRT错误

ios开发时,在Xcode中添加多个targets进行版本控制

  在ios开发时,我们经常会遇到对同一个app开发多个版本(Pro.Lite.Free)的情况,这里就涉及到xcode里通过添加多个targets来进行版本控制的问题了,下面就简单说明一下: 点击左侧的工程名称,右侧会出现PROJECT和TARGETS,点击你现在的target,假如叫A,右键弹出菜单中,选择Duplicate,复制一个相同的target,复制的target一般叫A copy,A copy和A的设置(编译条件.源文件.资源文件)完全一样,此时你可以根据需要修改A copy的编译

iOS开发项目-02添加子控制器以及项目分层

iOS开发项目-02添加子控制器以及项目分层 一.添加子控制器 1.设置根控制器(自定义) 说明:分析新浪微博应用,观察其整体建构层次.而系统的控制器不能满足项目开发的需求,这里把项目中原有的控制器删除. 自己定义一个TabBarViewController类.让这个类作为window窗口的根控制器. YYAppDelegate.m文件代码: 1 #import "YYAppDelegate.h" 2 #import "YYTabBarViewController.h&quo

iOS 开发之 点击tabbarItem添加是否跳转登录页面判断

iOS 开发之 点击tabbarItem添加是否跳转登录页面判断 项目里面在点击tabbarItem的时候需要判断是否是登录状态,如果未登录直接跳转登录页面,如果已登录则直接进入. 首先设置UITabBarController的代理为appdelegate如下:myTabBar.delegate = self; 然后在interface后面写上代理<UITabBarControllerDelegate> 实现代理里面的- (BOOL)tabBarController:(UITabBarCont

文顶顶 iOS开发UI篇—在UIImageView中添加按钮以及Tag的参数说明

ios开发UI篇—在ImageView中添加按钮以及Tag的参数说明 一.tag参数 一个视图通常都只有一个父视图,多个子视图,在开发中可以通过使用子视图的tag来取出对应的子视图.方法为Viewwithtag: 提示点:在xib中如果想要通过tag参数获取对应的控件(属性),不要把tag的参数设置为0,因为xib中所有的对象默认tag都为0,设置为0取不到对象. 二.ImageView中添加按钮(1)ImageView和Button的比较 Button按钮的内部可以放置多张图片(4),而Ima

如何在iOS开发中添加新的字体

iOS 开发默认字体是 Heiti SC ,即我们常用的「黑体-简」 用过一段时间后,就会发现字体过于单调了 ,那么怎么在iOS开发中添加新的字体呢 ,这里教你两种方法. 1.使用系统自带的字体 搜索fonts,不难发现,系统中是有不少字体的,而这些字体也是都是可以使用的. 这些字体只用时可以通过代码来设置,也可以直接来设置,方法很简单: 将text的属性设置为Attributed,再选择自己想要的系统字体就OK啦 2.使用自己从网上下载的字体 首先从网上下载自己喜欢的字体,将下载好的字体拖入当

IOS开发UI基础—在UIImageView中添加按钮以及Tag的参数说明

ios开发UI基础-在ImageView中添加按钮以及Tag的参数说明 一.tag参数 一个视图通常都只有一个父视图,多个子视图,在开发中可以通过使用子视图的tag来取出对应的子视图.方法为Viewwithtag: 提示点:在xib中如果想要通过tag参数获取对应的控件(属性),不要把tag的参数设置为0,因为xib中所有的对象默认tag都为0,设置为0取不到对象. 二.ImageView中添加按钮(1)ImageView和Button的比较 Button按钮的内部可以放置多张图片(4),而Im

李洪强iOS开发之添加手势

李洪强iOS开发之添加手势 02 - 添加手势