iOS通讯录联系人列表较完整(中文排序)

代码已上传GitHub https://github.com/6357/YUChineseSorting.git

参考http://www.cnblogs.com/syxchina/archive/2012/10/11/2720257.html

一、需要导入头文件pinyin.h这里有下载地址http://download.csdn.net/detail/u013873967/6991579

这是我写的完整代码,欢迎大家学习交流,帮我改进。http://download.csdn.net/detail/u013873967/6992825

二、ChineseString.h

?
1
2
3
4
5
6
7
8
9
10
11
12
#import <Foundation/Foundation.h>
#import "pinyin.h"
 
@interface ChineseString : NSObject
@property(retain,nonatomic)NSString *string;
@property(retain,nonatomic)NSString *pinYin;
 
//-----  返回tableview右方indexArray
+(NSMutableArray*)IndexArray:(NSArray*)stringArr;
 
//-----  返回联系人
+(NSMutableArray*)LetterSortArray:(NSArray*)stringArr;

三、ChineseString.cpp

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#import "ChineseString.h"
 
@implementation ChineseString
@synthesize string;
@synthesize pinYin;
 
#pragma mark - 返回tableview右方 indexArray
+(NSMutableArray*)IndexArray:(NSArray*)stringArr
{
     NSMutableArray *tempArray = [self ReturnSortChineseArrar:stringArr];
     NSMutableArray *A_Result=[NSMutableArray array];
     NSString *tempString ;
     
     for  (NSString* object in tempArray)
     {
         NSString *pinyin = [((ChineseString*)object).pinYin substringToIndex:1];
         //不同
         if (![tempString isEqualToString:pinyin])
         {
            // NSLog(@"IndexArray----->%@",pinyin);
             [A_Result addObject:pinyin];
             tempString = pinyin;
         }
     }
         return  A_Result;
}
 
#pragma mark - 返回联系人
+(NSMutableArray*)LetterSortArray:(NSArray*)stringArr
{
     NSMutableArray *tempArray = [self ReturnSortChineseArrar:stringArr];
     NSMutableArray *LetterResult=[NSMutableArray array];
     NSMutableArray *item = [NSMutableArray array];
     NSString *tempString ;
     //拼音分组
     for  (NSString* object in tempArray) {
 
          NSString *pinyin = [((ChineseString*)object).pinYin substringToIndex:1];
          NSString *string = ((ChineseString*)object).string;
         //不同
         if (![tempString isEqualToString:pinyin])
         {
             //分组
             item = [NSMutableArray array];
             [item  addObject:string];
             [LetterResult addObject:item];
             //遍历
             tempString = pinyin;
         } else //相同
         {
             [item  addObject:string];
         }
     }
     return  LetterResult;
}
 
 
 
 
//过滤指定字符串   里面的指定字符根据自己的需要添加
+(NSString*)RemoveSpecialCharacter: (NSString *)str {
     NSRange urgentRange = [str rangeOfCharacterFromSet: [NSCharacterSet characterSetWithCharactersInString: @ ",.?、 ~¥#&<>《》()[]{}【】^@/£&curren;|&sect;&uml;「」『』¢¬ ̄~@#&*()——+|《》$_€" ]];
     if  (urgentRange.location != NSNotFound)
     {
         return  [self RemoveSpecialCharacter:[str stringByReplacingCharactersInRange:urgentRange withString:@ "" ]];
     }
     return  str;
}
 
///
//
//返回排序好的字符拼音
//
///
+(NSMutableArray*)ReturnSortChineseArrar:(NSArray*)stringArr
{
     //获取字符串中文字的拼音首字母并与字符串共同存放
     NSMutableArray *chineseStringsArray=[NSMutableArray array];
     for ( int  i=0;i<[stringArr count];i++)
     {
         ChineseString *chineseString=[[ChineseString alloc]init];
         chineseString.string=[NSString stringWithString:[stringArr objectAtIndex:i]];
         if (chineseString.string==nil){
             chineseString.string=@ "" ;
         }
         //去除两端空格和回车
         chineseString.string  = [chineseString.string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
         
         
         //此方法存在一些问题 有些字符过滤不了
         //NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:@"@/:;()&yen;「」"、[]{}#%-*+=_\\|~<>$€^•'@#$%^&*()_+'\""];
         //chineseString.string = [chineseString.string stringByTrimmingCharactersInSet:set];
         
         
         //这里我自己写了一个递归过滤指定字符串   RemoveSpecialCharacter
         chineseString.string =[ChineseString RemoveSpecialCharacter:chineseString.string];
        // NSLog(@"string====%@",chineseString.string);
         
         
         //判断首字符是否为字母
         NSString *regex = @ "[A-Za-z]+" ;
         NSPredicate*predicate = [NSPredicate predicateWithFormat:@ "SELF MATCHES %@" ,regex];
         
         if  ([predicate evaluateWithObject:chineseString.string])
         {
             //首字母大写
             chineseString.pinYin = [chineseString.string capitalizedString] ;
         } else {
             if (![chineseString.string isEqualToString:@ "" ]){
                 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];
     }
     //按照拼音首字母对这些Strings进行排序
     NSArray *sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@ "pinYin"  ascending:YES]];
     [chineseStringsArray sortUsingDescriptors:sortDescriptors];
 
     return  chineseStringsArray;
}

四、UITableViewController.cpp

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- ( void )viewDidLoad
{
     self.title = @ "我的好友" ;
     [super viewDidLoad];
     
     NSArray *stringsToSort=[NSArray arrayWithObjects:
                             @ "¥hhh, .$" ,@ " ¥Chin ese " ,@ "开源中国 " ,@ "www.oschina.net" ,
                             @ "开源技术" ,@ "社区" ,@ "开发者" ,@ "传播" ,
                             @ "2013" ,@ "100" ,@ "中国" ,@ "暑假作业" ,
                             @ "键盘" , @ "鼠标" ,@ "hello" ,@ "world" ,
                             nil];
 
     self.indexArray = [ChineseString IndexArray:stringsToSort];
     self.LetterResultArr = [ChineseString LetterSortArray:stringsToSort];
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
以下是一个简单的 iOS 通讯录修改备注的代码实现示例: ```obj-c // 获取联系人信息并修改备注 - (void)updateContactRemarkWithName:(NSString *)name remark:(NSString *)remark { // 创建联系人名称搜索谓词 NSPredicate *predicate = [CNContact predicateForContactsMatchingName:name]; // 创建联系人信息请求对象 NSArray *keysToFetch = @[CNContactGivenNameKey, CNContactFamilyNameKey, CNContactMiddleNameKey, CNContactNicknameKey, CNContactPhoneNumbersKey, CNContactIdentifierKey]; CNContactFetchRequest *fetchRequest = [[CNContactFetchRequest alloc] initWithKeysToFetch:keysToFetch]; fetchRequest.predicate = predicate; NSError *error; CNContactStore *store = [[CNContactStore alloc] init]; // 遍历符合条件的联系人 [store enumerateContactsWithFetchRequest:fetchRequest error:&error usingBlock:^(CNContact * _Nonnull contact, BOOL * _Nonnull stop) { // 创建可变联系人对象 CNMutableContact *mutableContact = [contact mutableCopy]; // 设置备注信息 mutableContact.note = remark; // 保存修改后的联系人信息 CNSaveRequest *request = [[CNSaveRequest alloc] init]; [request updateContact:mutableContact]; [store executeSaveRequest:request error:nil]; }]; } // 更新好友备注信息 - (void)updateFriendRemarkWithContact:(CNContact *)contact { // 获取好友列表中的好友信息 NSString *friendId = [self getFriendIdByContactId:contact.identifier]; if (friendId) { // 调用即时通讯 SDK 的接口更新好友备注信息 [self updateFriendRemarkWithFriendId:friendId remark:contact.note]; } } ``` 在这个示例中,我们首先根据姓名搜索联系人信息,然后遍历符合条件的联系人,创建可变联系人对象,并设置备注信息。最后通过 CNSaveRequest 和 CNContactStore 的 executeSaveRequest 方法保存修改后的联系人信息。 在更新好友备注信息时,我们需要根据联系人的唯一标识符获取到好友的唯一标识符,然后调用第三方即时通讯 SDK 的接口更新好友备注信息。 需要注意的是,这个示例中的代码只是一个简单的实现,具体实现方式需要根据具体的业务需求进行调整。同时,在实现中还需要考虑到错误处理和用户授权等问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值