我使用链接http://www.devx.com/wireless/Article/43374
实现了字母部分标题很好用。
我使用此逻辑将第一个字符作为索引
// To implement indexes and section headers
contactsArray = [[NSMutableArray alloc] init];
for(int i=0; i< tableViewArray.count ; i++)
{
Contact *contact = [tableViewArray objectAtIndex:i];
[contactsArray addObject:contact.name];
}
contactIndex = [[NSMutableArray alloc] init];
for (int i=0; i<[contactsArray count]; i++){
//---get the first char of each contactName---
char alphabet = [[[contactsArray objectAtIndex:i] uppercaseString] characterAtIndex:0];
NSString *firstChar = [NSString stringWithFormat:@"%C", alphabet];
//---add each letter to the index array---
if (![contactIndex containsObject:firstChar])
{
[contactIndex addObject:firstChar];
}
}
但是如果是联系人,则返回 1,2,3 ......
But need to display # instead of all numaerical values headers
答案 0 :(得分:0)
if (alphabet >= '0' && alphabet <= '9') alphabet = '#';
答案 1 :(得分:0)
使用 NSNumberFormatter 检查NSString是否为数字
// To implement indexes and section headers
contactsArray = [[NSMutableArray alloc] init];
for(int i=0; i< tableViewArray.count ; i++)
{
Contact *contact = [tableViewArray objectAtIndex:i];
[contactsArray addObject:contact.name];
}
contactIndex = [[NSMutableArray alloc] init];
for (int i=0; i<[contactsArray count]; i++){
//---get the first char of each contactName---
char alphabet = [[[contactsArray objectAtIndex:i] uppercaseString] characterAtIndex:0];
NSString *firstChar = [NSString stringWithFormat:@"%C", alphabet];
NSNumberFormatter *testFormatter = [[NSNumberFormatter alloc] init];
if(nil == [testFormatter numberFromString: firstChar]){
firstChar = @"#";
}
//---add each letter to the index array---
if (![contactIndex containsObject:firstChar])
{
[contactIndex addObject:firstChar];
}
}