一、表视图的索引目录

首先要创建一个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. &lt;Android 基础(二十六)&gt; 渐变色圆角Button

    简介 总结下之前看的自定义View的内容,结合一个简单的例子,阐述下基本用法和大致的使用流程,这个例子比较简单,更复杂的自定义View,随着自己的学习,后面再慢慢添加.作为一个Android开发者,这 ...

随机推荐

  1. QDirModel

    #include "dialog.h" #include "ui_dialog.h" #include<QInputDialog> Dialog:: ...

  2. TTFB-首字节时间简介

    百度站长工具里看到有一个"首字节时间"的建议,第一次听说,还真不知道是什么东东.百度站长工具里面的解释是:"浏览器开始收到服务器响应数据的时间=后台处理时间+重定向时间, ...

  3. win10内网外网智能访问

    当电脑同时连接有线和WiFi时(有线连接为内网,WiFi为外网),会出现内网和外网内容无法同时访问的情况. 本方法实现内网和外网的同时访问. 第一步: 输入指令 “route print ” 查看路由 ...

  4. iOS:实现MKAnnotation协议,在地图上设置大头针,点击显示具体的位置信息

    如何添加大头针(地标): 通过MapView的addAnnotation方法可以添加一个大头针到地图上 通过MapView的addAnnotations方法可以添加多个大头针到地图上 –(void)a ...

  5. Theano学习笔记(三)——图结构

    图结构(Graph Structures)这是理解Theano该基金会的内部运作. Theano编程的核心是用符号占位符把数学关系表示出来. 图结构的组成部分 如图实现了这段代码: importthe ...

  6. mysql修改密码Your password does not satisfy the current policy requirements

    出现这个问题的原因是:密码过于简单.刚安装的mysql的密码默认强度是最高的,如果想要设置简单的密码就要修改validate_password_policy的值, validate_password_ ...

  7. 认识ASP.NET MVC的5种AuthorizationFilter

    在总体介绍了筛选器及其提供机制(<深入探讨ASP.NET MVC的筛选器>)之后,我们按照执行的先后顺序对四种不同的筛选器进行单独介绍,首先来介绍最先执行的AuthorizationFil ...

  8. 新版MySql 5.6.20,安装后无法登陆的解决办法

    1.按照提示安装好mysql 2.运行cmd 进入mysql的安装目录,我的安装目录C:\Program Files\MySQL\MySQL Server 5.6\bin 输入 cd C:\Progr ...

  9. ConcurrentQueue并发队列

    表示线程安全的先进先出 (FIFO) 集合 System.Collections.Concurrent 命名空间提供多个线程安全集合类.当有多个线程并发访问集合时,应使用这些类代替 System.Co ...

  10. [学习笔记]Ubuntu下安装配置SQLSERVER2017

    摘要自微软官网: https://docs.microsoft.com/zh-cn/sql/linux/quickstart-install-connect-ubuntu 安装步骤: 1. 导入公共秘 ...