image.png

关键代码,demo在最后

// ViewController.m

// TestNameSortAndSplit

//

// Created by ethan on 17-6-14.

// Copyright (c) 2017年 jay. All rights reserved.

//

#import "ViewController.h"

#import "pinyin.h"

#import "ChineseString.h"

@interface ViewController ()

@end

@implementation ViewController

@synthesize dataArr = _dataArr;

@synthesize sortedArrForArrays = _sortedArrForArrays;

@synthesize sectionHeadsKeys = _sectionHeadsKeys;

- (void)viewDidLoad

{

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

[self initData];

[self createTableView];

}

- (void)didReceiveMemoryWarning

{

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

- (void)dealloc {

[_dataArr release];

[_sortedArrForArrays release];

[_sectionHeadsKeys release];

[_tableView release];

[super dealloc];

}

#pragma mark -

#pragma mark create method

- (void)initData {

//init

_dataArr = [[NSMutableArray alloc] init];

_sortedArrForArrays = [[NSMutableArray alloc] init];

_sectionHeadsKeys = [[NSMutableArray alloc] init]; //initialize a array to hold keys like A,B,C ...

//add test data

[_dataArr addObject:@"郭靖"];

[_dataArr addObject:@"黄蓉"];

[_dataArr addObject:@"杨过"];

[_dataArr addObject:@"苗若兰"];

[_dataArr addObject:@"令狐冲"];

[_dataArr addObject:@"小龙女"];

[_dataArr addObject:@"胡斐"];

[_dataArr addObject:@"水笙"];

[_dataArr addObject:@"任盈盈"];

[_dataArr addObject:@"白琇"];

[_dataArr addObject:@"狄云"];

[_dataArr addObject:@"石破天"];

[_dataArr addObject:@"殷素素"];

[_dataArr addObject:@"张翠山"];

[_dataArr addObject:@"张无忌"];

[_dataArr addObject:@"青青"];

[_dataArr addObject:@"袁冠南"];

[_dataArr addObject:@"萧中慧"];

[_dataArr addObject:@"袁承志"];

[_dataArr addObject:@"乔峰"];

[_dataArr addObject:@"王语嫣"];

[_dataArr addObject:@"段玉"];

[_dataArr addObject:@"虚竹"];

[_dataArr addObject:@"苏星河"];

[_dataArr addObject:@"丁春秋"];

[_dataArr addObject:@"庄聚贤"];

[_dataArr addObject:@"azi"];

[_dataArr addObject:@"阿朱"];

[_dataArr addObject:@"阿碧"];

[_dataArr addObject:@"鸠魔智"];

[_dataArr addObject:@"萧远山"];

[_dataArr addObject:@"慕容复"];

[_dataArr addObject:@"慕容博"];

[_dataArr addObject:@"Jim"];

[_dataArr addObject:@"Lily"];

[_dataArr addObject:@"Ethan"];

[_dataArr addObject:@"Green小"];

[_dataArr addObject:@"Green大"];

[_dataArr addObject:@"DavidSmall"];

[_dataArr addObject:@"DavidBig"];

[_dataArr addObject:@"James"];

[_dataArr addObject:@"Kobe Brand"];

[_dataArr addObject:@"Kobe Crand"];

self.sortedArrForArrays = [self getChineseStringArr:_dataArr];

}

- (void)createTableView {

_tableView = [[UITableView alloc] initWithFrame:self.view.frame style:UITableViewStylePlain];

_tableView.dataSource = self;

_tableView.delegate = self;

[self.view addSubview:_tableView];

}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

return [[self.sortedArrForArrays objectAtIndex:section] count];

}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

return [self.sortedArrForArrays count];

}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section

{

return [_sectionHeadsKeys objectAtIndex:section];

}

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {

return self.sectionHeadsKeys;

}

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

NSString *cellId = @"CellId";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];

if (cell == nil) {

cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId] autorelease];

}

if ([self.sortedArrForArrays count] > indexPath.section) {

NSArray *arr = [self.sortedArrForArrays objectAtIndex:indexPath.section];

if ([arr count] > indexPath.row) {

ChineseString *str = (ChineseString *) [arr objectAtIndex:indexPath.row];

cell.textLabel.text = str.string;

} else {

NSLog(@"arr out of range");

}

} else {

NSLog(@"sortedArrForArrays out of range");

}

return cell;

}

- (NSMutableArray *)getChineseStringArr:(NSMutableArray *)arrToSort {

NSMutableArray *chineseStringsArray = [NSMutableArray array];

for(int i = 0; i < [arrToSort count]; i++) {

ChineseString *chineseString=[[ChineseString alloc]init];

chineseString.string=[NSString stringWithString:[arrToSort objectAtIndex:i]];

if(chineseString.string==nil){

chineseString.string=@"";

}

if(![chineseString.string isEqualToString:@""]){

//join the pinYin

NSString *pinYinResult = [NSString string];

for(int j = 0;j < chineseString.string.length; j++) {

NSString *singlePinyinLetter = [[NSString stringWithFormat:@"%c",

pinyinFirstLetter([chineseString.string characterAtIndex:j])]uppercaseString];

pinYinResult = [pinYinResult stringByAppendingString:singlePinyinLetter];

}

chineseString.pinYin = pinYinResult;

} else {

chineseString.pinYin = @"";

}

[chineseStringsArray addObject:chineseString];

[chineseString release];

}

//sort the ChineseStringArr by pinYin

NSArray *sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"pinYin" ascending:YES]];

[chineseStringsArray sortUsingDescriptors:sortDescriptors];

NSMutableArray *arrayForArrays = [NSMutableArray array];

BOOL checkValueAtIndex= NO; //flag to check

NSMutableArray *TempArrForGrouping = nil;

for(int index = 0; index < [chineseStringsArray count]; index++)

{

ChineseString *chineseStr = (ChineseString *)[chineseStringsArray objectAtIndex:index];

NSMutableString *strchar= [NSMutableString stringWithString:chineseStr.pinYin];

NSString *sr= [strchar substringToIndex:1];

NSLog(@"%@",sr); //sr containing here the first character of each string

if(![_sectionHeadsKeys containsObject:[sr uppercaseString]])//here I'm checking whether the character already in the selection header keys or not

{

[_sectionHeadsKeys addObject:[sr uppercaseString]];

TempArrForGrouping = [[[NSMutableArray alloc] initWithObjects:nil] autorelease];

checkValueAtIndex = NO;

}

if([_sectionHeadsKeys containsObject:[sr uppercaseString]])

{

[TempArrForGrouping addObject:[chineseStringsArray objectAtIndex:index]];

if(checkValueAtIndex == NO)

{

[arrayForArrays addObject:TempArrForGrouping];

checkValueAtIndex = YES;

}

}

}

return arrayForArrays;

}

@end

html5仿苹果通讯录效果,iOS 仿通讯录索引相关推荐

  1. mobiscroll实践:移动端仿苹果select效果的实现

    最近在做一个微信服务号的开发,设计中日期选择和周期选择的输入框需要使用苹果的select下拉效果,在网上折腾了好久,最终的感慨就是这事基本上只有mobiscroll能搞定,然后专心死磕mobiscro ...

  2. android仿苹果悬浮窗,Android仿IOS悬浮拖动按钮

    拖动效果 开发是我们有时候需要一些快捷通道,类似ios系统的拖动方块. Android6.0及其以上版本手机使用悬浮窗功能会正常使用,在23及以上版本下编译,悬浮窗权限默认是关闭没有权限,然在23以下 ...

  3. php蚂蚁森林的效果,iOS仿支付宝蚂蚁森林动画效果

    最近要用到类似支付宝蚂蚁森林的动画效果,所以就简单写了一个比较简单的一个demo,效果图如下: 效果图1 需求: 在这个view上面随机出现n个黄钻(button),黄钻按钮还得上下抖动,箭头1指向的 ...

  4. android仿苹果滑动,Android开发仿IOS的滑动按钮

    释放双眼,带上耳机,听听看~! 项目结构 MainActivity public class MainActivity extends AppCompatActivity { @Override pr ...

  5. android仿苹果SwitchButton效果的实现

    1.新建一个类,类名就是SwitchButton import android.content.Context; import android.graphics.Bitmap; import andr ...

  6. android 仿苹果 小组件,安卓仿ios14桌面小部件

    安卓仿ios14桌面小部件,是一个可以让安卓手机的界面看起来像苹果界面的软件,功能非常强大,它可以提供多种不同主题的壁纸桌面,随心选择,设置后的效果还是非常不错的,很有高级感,操作简单,上手也很快. ...

  7. android 高仿苹果listview,android listview仿iphone特效

    ios常见视图在顶部往下拉(下冲)或底部往上拉(上冲)有一个弹性回退的动画效果.著名的CM ROM和一些手机厂商也争相集成这种效果.android 从2.3开始实现了下冲到底部和上冲到顶部时颜色渐变动 ...

  8. html5点赞仿抖音,iOS仿抖音—加载点赞动画效果

    iOS仿抖音短视频 前言 前段时间比较忙,最近终于有时间就继续对仿抖音的demo进行更新,本次更新的主要是抖音上的几种动画,下面先来看下效果图: 抖音 说明 经过观察发现抖音主要要以下几种动画效果: ...

  9. php仿苹果,关于8个超炫酷仿苹果应用的HTML5动画的图文详解

    苹果的产品一直以精美的UI著称,无论是软件应用还是硬件设备.本文主要分享了8个很不错的HTML5动画应用,这些动画正式模仿了苹果的各类应用,有焦点图.钟表.菜单等HTML5应用和jQuery插件,大家 ...

最新文章

  1. 设备树与驱动的关系_Linux I2C驱动竟然如此简单?手把手教你写i2c驱动
  2. python 全景图像拼接( python3.6 + opencv3.4.2.16) 融合
  3. DSP unresolved symbol问题的解决
  4. 如何去maven仓库下载jar包
  5. log file sync(日志文件同步) 与 Log file parallel write 等待事件
  6. Ubuntu 查看操作系统的位数
  7. laravel静态资源
  8. Hook API (C++)
  9. 前端学习(1714):前端系列javascript之目录结构
  10. 工具使用-----Jmeter的基础用法
  11. Java基础篇:嵌套 if 语句
  12. 热更新和热修复 个人小结
  13. allure测试报告
  14. winform程序制作安装包
  15. WindowsBuilder安装使用
  16. svn创建分支的做法
  17. 【Linux】一步一步学Linux系列教程汇总(更新中......)
  18. 图片去水印免费版-图片去水印免费版在线去水印
  19. 人工智能在脑神经科学的应用创新与热点——脑机接口
  20. c语言任何一个大于6的偶数均可表示为两个素数之和,C语言:验证哥德巴赫猜想:任何一个大于6的偶数均可表示为2个素数之和...

热门文章

  1. Java_B_Province测试次数
  2. 领导者如何激发员工成就感
  3. python 猜姓氏程序 7个问题知道你姓啥
  4. android 地图方向北方,android 地图
  5. MYSQL 中UNIQUE 用法 意思
  6. 502 解决:[WARNING] fpm_children_bury
  7. 文科生学python_一个文科生的python心路历程
  8. 上线65535_百闻牌:遇到这几个式神压力真大,65535攻击带不屈,这咋打?
  9. python的读后感_Python读书笔记
  10. htc t328w android4.0,Android4.0新机 HTC T328w仅售1999