一、表视图的索引目录

首先要创建一个TableView,之前有说过,这里就不详细说了(参考前面第十四篇)。

直接贴代码吧,

 #import "ViewController.h"

 @interface ViewController ()<UITableViewDataSource,UITableViewDelegate>{

     UITableView *tableView;

     NSArray *list;//分组标题
     NSDictionary *dic;//每行内容
 }

 @end

 @implementation ViewController

 - (void)viewDidLoad {
     [super viewDidLoad];
     // Do any additional setup after loading the view, typically from a nib.
     CGFloat width = self.view.frame.size.width;
     CGFloat height = self.view.frame.size.height;

     tableView = [[UITableView alloc] initWithFrame:(CGRect){,,width,height}];
     tableView.dataSource = self;
     tableView.delegate = self;
     tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
     [self.view addSubview:tableView];

     [self readySource];
 }

 //在viewDidLoad方法中调用
 - (void)readySource{

     dic = @{@"A":@[@"adhere", @"adaft", @"abase", @"alarm", @"apace"],
             @"B":@[@"babel", @"board", @"bili", @"band"],
             @"C":@[@"cabbages", @"crray", @"china", @"chafe", @"cocos", @"core"],
             @"D": @[@"dabbing", @"dacca", @"dady"],
             @"E": @[@"email", @"each", @"eager", @"ebook", @"enable", @"embalm", @"eman"],
             @"F": @[@"fear", @"faceBook", @"float", @"flour"],
             @"G": @[@"getter", @"gaba", @"grace", @"great", @"gracious"],
             @"H": @[@"header", @"haber", @"habit", @"hoard"],
             };
     list = dic.allKeys;
 }

 //返回分组个数
 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
     return [list count];
 }

 //返回每个分组中的行数
 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
     //获取分组
     NSString *key = [list objectAtIndex:section];
     //获取分组里面的数组
     NSArray *array = [dic objectForKey:key];

     return [array count];
 }

 - (UITableViewCell *)tableView:(UITableView *)TableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

     //索引路径
     NSInteger section = [indexPath section];
     NSInteger row = [indexPath row];

     //获取分组
     NSString *key = [list objectAtIndex:section];

     //获取分组里面的数组
     NSArray *array = [dic objectForKey:key];

     //建立可重用标识符
     static NSString *indentifier = @"UITableViewCell";

 //    NSString *indentifier = [NSString stringWithFormat:@"UITableViewCell%ld%ld",(long)indexPath.row,(long)indexPath.section];

     UITableViewCell *cell = [TableView dequeueReusableCellWithIdentifier:indentifier];
     if (!cell) {
         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:indentifier];
     }

     //设置其辅助样式
     cell.accessoryType = UITableViewCellAccessoryNone;

     //移除所有子视图
     [cell.subviews enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
         UIView *view = (UIView*)obj;
         [view removeFromSuperview];
     }];

     //添加新视图
     UILabel *title = [[UILabel alloc] initWithFrame:(CGRect){,,,}];
     NSString *str = [array objectAtIndex:row];
     title.text = str;
     title.font = [UIFont systemFontOfSize:];
     title.textColor = [UIColor blueColor];
     [cell addSubview:title];

     return cell;
 }

 //获取分组标题
 - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{

     NSString *key = [list objectAtIndex:section];
     return key;
 }

 //给TableViewCell添加索引
 - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView{

     return list;

 }

 //点击目录
 - (NSInteger)tableView:(UITableView *)TableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index{

 //获取所点目录对应的IndexPath值
     NSIndexPath *selectIndexPath = [NSIndexPath indexPathForRow: inSection:index];

 //让Table滚动到对应的indexPath位置
     [TableView scrollToRowAtIndexPath:selectIndexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];
     return index;
 }

 //设置TableViewCell行高
 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{

     ;
 }

效果图:

二、可以进行标记的表视图

首先要在- (UITableViewCell *)tableView:(UITableView *)TableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;方法中,把cell.accessoryType = UITableViewCellAccessoryNone;

 //点击行事件
 - (void)tableView:(UITableView *)TableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

     //获取点击行的cell
     UITableViewCell *cell = [TableView cellForRowAtIndexPath:indexPath];

     //如果cell已经被标记
     if (cell.accessoryType == UITableViewCellAccessoryCheckmark) {
         //取消标记
         cell.accessoryType = UITableViewCellAccessoryNone;
     }else
         //反之,标记
         cell.accessoryType = UITableViewCellAccessoryCheckmark;

     //取消选中效果
     [TableView deselectRowAtIndexPath:indexPath animated:YES];
 }

效果图:

ios基础篇(二十六)—— UITableViewCell的分组索引与标记的更多相关文章

  1. ios基础篇(十六)——UIWebView的基本使用

    UIWebView是内置的浏览器控件,可以用它来浏览网页.打开文档等.UIWebView是一个混合体,具体的功能控件内置的,实现一些基本的功能.UIWebView可以查看Html网页,pdf文件,do ...

  2. ios基础篇(十四)——UITableView(二)属性及基本用法

    上一篇说了UITableView的重用机制,让我们对UITableView有了简单了解,下面说说UITableView的属性及常见方法. 一.属性 1.frame:设置控件的尺寸和大小 2.backg ...

  3. ios基础篇(十二)——UINavgationController的使用(三)ToolBar

    UIToolBar存在于UINavigationController导航栏控制器中,而且默认被隐藏:设置UINavigationController的toolbarHidden属性可显示UIToolB ...

  4. ioS基础篇(十九)——UIResponder简析

    UIResponder类定义了对象相应和控制事件的接口,他是UIApplication.UIView的超类,这类的实例通常被称为应答对象. 一.Responder对象 在iOS系统中,能够响应并处理事 ...

  5. ios基础篇(十八)——Delegate 、NSNotification 和 KVO用法及其区别

    一.Delegate Delegate本质是一种程序设计模型,iOS中使用Delegate主要用于两个页面之间的数据传递.iphone中常用@protocol和delegate的机制来实现接口的功能. ...

  6. iOS基础篇(十五)——UIScrollView的基本用法

    滚动视图(UIScrollView)通常用于显示内容尺寸大于屏幕尺寸的视图. 一.基本属性 1.CGSize contentSize :设置UIScrollView的滚动范围 2.CGPoint co ...

  7. JavaEE基础(二十六)/网络

    1.网络编程(网络编程概述) A:计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信 ...

  8. ios基础篇(十)——UINavgationController的使用(一)UIBarButtonItem的添加

    UINavigationController又被成为导航控制器,继承自UIViewController,以栈的方式管理所控制的视图控制器,下面就详细说一下UINavigationController的 ...

  9. Bootstrap &lt;基础二十六&gt;进度条

    Bootstrap 进度条.在本教程中,你将看到如何使用 Bootstrap 创建加载.重定向或动作状态的进度条. Bootstrap 进度条使用 CSS3 过渡和动画来获得该效果.Internet ...

随机推荐

  1. redis慢查询日志

    运维需要记录一下主redis中那些“慢操作”的命令,然后找到相关的业务方,不然的话,阻塞 就不好玩了.然后就直接在redis手册中就找到了相关的命令. SLOWLOG subcommand [argu ...

  2. C#中语音合成简单使用

    我使用的是vs2013 1.在项目中添加引用,项目->添加引用->COM选择Microsoft Speech Object Library 2.在需要使用语音合成的地方调用代码: SpVo ...

  3. 【转】发布一个基于NGUI编写的UI框架

    发布一个基于NGUI编写的UI框架 1.加载,显示,隐藏,关闭页面,根据标示获得相应界面实例 2.提供界面显示隐藏动画接口 3.单独界面层级,Collider,背景管理 4.根据存储的导航信息完成界面 ...

  4. R on Ubuntu

    I have been using R recently. R is statistics programming language. R has attracted more and more at ...

  5. Zookeeper开源客户端框架Curator简介[转]

    Curator是Netflix开源的一套ZooKeeper客户端框架. Netflix在使用ZooKeeper的过程中发现ZooKeeper自带的客户端太底层, 应用方在使用的时候需要自己处理很多事情 ...

  6. windows phone 8.0 app 移植到windows10 app 页面类

    phone:PhoneApplicationPage    全部替换为Page phone:WebBrowser               全部替换为   WebView IsScriptEnabl ...

  7. 反正切函数求圆周率 atan

    #define PI atan(1.0)*4 原理:tan ∏/4=1; atan2: 返回给定的 X 及 Y 坐标值的反正切值.反正切的角度值等于 X 轴正方向与通过原点和给定坐标点 (Y坐标, X ...

  8. (16)odoo8 API 指南

    http://odoo-new-api-guide-line.readthedocs.org/en/latest/index.html

  9. 解决 Ubuntu 开机 Waiting for 60 seconds more for network configuration

    sudo vim /etc/network/interfaces, 将该文件的内容修改为如下:(也就是说删掉其他的什么auto eth0.auto wlan0) auto lo iface lo in ...

  10. 让用户打开你app的位置功能

    +运动 http://www.ccidnet.com/2015/0819/10014152.shtml 让你的app不再是一个购物网站, 而是一种生活方式, 逛街,在实体店逛街积累里程,兑换积分  送 ...