`

IOS之表视图添加索引

 
阅读更多

我们要实现的效果如下。

 

 

 

1.修改ControlView.h,即添加变量dict,用于存储TabelView的数据源。

#import <UIKit/UIKit.h>

@interface IkrboyViewController5 : UIViewController{
    NSMutableDictionary *dict;
}

@end

 2.在ControlView.m添加如下修改

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self initTableViewData];
	// Do any additional setup after loading the view.
}

-(void)initTableViewData{
    NSBundle *bundle = [NSBundle mainBundle];
    NSString *plistPath = [bundle pathForResource:@"user_head" ofType:@"plist"];
    NSArray *dataArr = [[NSArray alloc] initWithContentsOfFile:plistPath];
    //将所有数据分为三组
    NSMutableArray *arr1 = [NSMutableArray array];
    NSMutableArray *arr2 = [NSMutableArray array];
    NSMutableArray *arr3 = [NSMutableArray array];
    
    dict = [NSMutableDictionary dictionary];
    [dict setObject:arr1 forKey:@"Group1"];
    [dict setObject:arr2 forKey:@"Group2"];
    [dict setObject:arr3 forKey:@"Group3"];
    
    //设置划分数据的依据,即根据index分三组,index为0-1的为第一组,2-4为第二组,5为第三组
    for(NSInteger index = 0; index < [dataArr count]; index++){
        NSDictionary *item = [dataArr objectAtIndex:index];
        if(index<2){
            [arr1 addObject:item];
        }
        else if(index>=2&&index<5){
            [arr2 addObject:item];
        }
        else if(index>=5){
            [arr3 addObject:item];
        }
    }
}

 3.初始化TableView

//分为多少个分组
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
	return [[dict allKeys] count];
}
//每个分组的数据单元个数
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    switch(section)
    {
        case 0:
        {
            return [[dict objectForKey:@"Group1"] count];
        }
        case 1:
        {
            return [[dict objectForKey:@"Group2"] count];
        }
        case 2:
        {
            return [[dict objectForKey:@"Group3"] count];
        }
    }
    return 0;
}
//分组的标题,不实现下面的方法,不显示分组标题
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    //dict allKeys取出的key arr无顺序,需进行排序
    NSArray *arr = [[dict allKeys] sortedArrayUsingSelector:@selector(compare:)];
	return [arr objectAtIndex:section];
}
//列表右侧的索引提示,不实现下面的方法,不显示右侧索引
-(NSArray *) sectionIndexTitlesForTableView: (UITableView *) tableView
{
    //dict allKeys取出的key arr无顺序,需进行排序
    NSArray *arr = [[dict allKeys] sortedArrayUsingSelector:@selector(compare:)];
    return arr;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"myTableCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    
    NSUInteger row = [indexPath row];
    NSUInteger section = [indexPath section];
    NSArray *arr;
    
    switch (section) {
        case 0:
            arr = [dict objectForKey:@"Group1"];
            break;
        case 1:
            arr = [dict objectForKey:@"Group2"];
            break;
        case 2:
            arr = [dict objectForKey:@"Group3"];
            break;
        default:
            break;
    }
    
    NSDictionary *rowDict = [arr objectAtIndex:row];
    cell.textLabel.text =  [rowDict objectForKey:@"itemName"];
    NSLog(@"cell.label.text =  %@",[rowDict objectForKey:@"itemName"]);
    
    NSString *imagePath = [rowDict objectForKey:@"itemImagePath"];
    cell.imageView.image = [UIImage imageNamed:imagePath];
    NSLog(@"cell.image.image  =  %@",imagePath);
    
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    
    return cell;
}

//选中Cell响应事件
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    [tableView deselectRowAtIndexPath:indexPath animated:YES];//选中后的反显颜色即刻消失
    NSUInteger row = [indexPath row];
    NSUInteger section = [indexPath section];
    NSArray *arr;
    
    switch (section) {
        case 0:
            arr = [dict objectForKey:@"Group1"];
            break;
        case 1:
            arr = [dict objectForKey:@"Group2"];
            break;
        case 2:
            arr = [dict objectForKey:@"Group3"];
            break;
        default:
            break;
    }
    
    NSDictionary *rowDict = [arr objectAtIndex:row];
    NSString *userName =  [rowDict objectForKey:@"itemName"];
    NSLog(@"userName=%@",userName);
}

 

 

  • 大小: 49 KB
分享到:
评论

相关推荐

    iOS 轮播视图 demo

    在iOS开发中,轮播视图(Carousel View)是一种常见的用户界面组件,它允许用户以循环滚动的方式展示一系列图片或内容。在这个名为“iOS 轮播视图 demo”的项目中,开发者提供了一个用Objective-C编写的广告轮播视图...

    ios-集合视图简单自定义布局.zip

    在iOS开发中,集合视图(UICollectionView)是一个强大的控件,用于展示大量数据,具有高度可定制性。这个“ios-集合视图简单自定义布局.zip”文件包含了一个名为"CollectionLayerDemo"的示例项目,它展示了如何...

    ios 表视图二

    在iOS开发中,表视图(UITableView)是用于展示数据的常见组件,它允许用户滚动浏览条目并进行交互。本教程将深入探讨如何在iOS应用中实现自定义单元格,并从数据库中读取数据来填充这些单元格,以创建一个功能丰富...

    iOS 无限滚动视图

    2. 设置代理:遵循 DCCycleScrollViewDataSource 和 DCCycleScrollViewDelegate 协议,实现必要的方法,如获取轮播图数量、获取特定索引的视图等。 3. 自定义行为:如果需要自定义滚动速度、自动滚动间隔、点击回调...

    ios-IOS 滚动视图加点击事件的封装.zip

    在iOS开发中,滚动视图(UIScrollView)是十分常见且重要的控件,它允许用户查看超过屏幕大小的内容。本项目“ios-IOS 滚动视图加点击事件的封装”着重于解决如何在一个循环滚动视图中添加点击事件,并进行有效封装...

    iOS-使用表格视图UITableView

    在iOS开发中,UITableView是一种非常重要的视图组件,它用于展示数据列表,广泛应用于各种应用场景,如联系人列表、消息列表等。这个“iOS-使用表格视图UITableView”项目可能是为了帮助开发者熟悉如何在实际应用中...

    ios-防微信通讯录索引动画,自定义索引.zip

    UITableView是iOS中用于展示列表数据的主要视图,它允许数据按组分隔,并提供侧边索引以便快速跳转到特定组。这里的防微信通讯录索引就是对这个功能的一种模仿和优化。 2. **自定义索引视图**: 微信通讯录索引的...

    iOS 旋转木马视图

    - `carousel:viewForItemAtIndex:reusingView:`方法用于返回每个项目视图,可以根据索引值动态设置视图内容。 6. **性能优化** - iCarousel支持缓存策略,可以有效减少内存占用和提高滚动性能,通过合理配置视图...

    ios带索引的列表

    "ios带索引的列表"指的是利用UITableView并添加索引来实现高效的浏览体验。这种索引通常位于列表的右侧,允许用户快速跳转到以特定字母开头的项目,极大地提升了用户体验。 首先,我们要理解UITableView的基本结构...

    iOS tableview 索引

    当我们谈论“iOS tableView 索引”时,通常指的是为tableView添加一个侧边索引,以便用户能快速浏览和跳转到列表中的特定部分。 侧边索引,也称为section index或快速索引,通常显示在tableView的右侧,以字母顺序...

    IOS开发-TableView表视图基础 源码

    本资源提供的"IOS开发-TableView表视图基础 源码"旨在帮助开发者掌握UITableView的基本使用方法和核心概念。 1. **UITableView介绍** UITableView是一个用于展示动态数据的滚动视图,它可以显示一行行的数据,每个...

    ios-UITableView右侧索引.zip

    4. 分组头部的交互:如果需要响应用户的触摸事件,可以在自定义的视图中添加手势识别器,然后在相应的代理方法中处理。 总结来说,这个压缩包中的"UitableViewIndexes"文件可能包含了一些示例代码或资源,用于演示...

    iOS 自动循环滚动视图

    在iOS开发中,创建一个自动循环滚动的视图可以极大地增强用户体验,特别是在展示广告轮播、产品列表或者图片滑动等场景。这个功能通常通过自定义`UIScrollView`或使用第三方库来实现。以下是对"iOS 自动循环滚动视图...

    IOS应用源码之【框架】带拼音索引的全国城市选择代码.rar

    这个“IOS应用源码之【框架】带拼音索引的全国城市选择代码.rar”就是一个很好的解决方案,它提供了一个带有拼音索引的全国城市选择器,使用户能够快速找到并选择所需的城市。 首先,我们要理解这个源码的核心概念...

    ios-tableview 动态添加.zip

    "ios-tableview 动态添加.zip"这个压缩包很可能包含了一个示例项目,演示如何在运行时动态地向UITableView添加数据。在这里,我们将深入探讨在iOS应用中动态加载UITableView的相关知识点。 首先,UITableView的动态...

    IOS应用源码之高温地图视图FHeatMap.zip

    本资源"IOS应用源码之高温地图视图FHeatMap.zip"提供了一个专为iOS设计的高温地图视图实现,名为"FHeatMap"。这个开源项目可以帮助开发者更好地理解和实现自定义地图渲染,特别是在显示热度数据、地理信息或者气象...

    ios-segment切换视图.zip

    在iOS开发中,分段控制器(Segmented Control)是一种常见的用户界面元素,它允许用户在多个视图或功能之间进行切换。"ios-segment切换视图.zip" 是一个示例项目,展示了如何利用分段控制器在不同的视图之间进行平滑...

    ios-搜索框封装,并且右侧索引实现相应位置展示.zip

    本示例项目"ios-搜索框封装,并且右侧索引实现相应位置展示.zip"着重于如何封装一个自定义的搜索框,并且在搜索框右侧添加一个索引条,以实现用户滚动时索引与内容对应显示的功能。下面我们将详细探讨这一技术实现。...

    ios-滑动切换视图.zip

    - 通常滑动视图切换会与数据模型紧密结合,比如一个数组存储了所有视图控制器的引用或对应的数据,滑动时根据索引来加载相应的视图控制器。 7. **适配器模式**: - 可以使用适配器模式(Adapter Pattern)将数据...

    移动软件开发-3期(KC015) 表视图 教学设计.doc

    【移动软件开发-3期(KC015) 表视图 教学设计】文档主要涉及iOS应用开发中的表视图(UITableView)及其相关知识,这是iOS开发中不可或缺的一部分。表视图是一种用于展示数据列表的视图,通常包含多个层次的数据,如...

Global site tag (gtag.js) - Google Analytics