按字母顺序划分为部分我的Tableview
divided into sections alphabetic my Tableview
我有一个包含字符串格式名称的数组 (es.luca,marco,giuseppe,..)。
该数组将用于填充 table。
如何将 table 分成多个部分 (az) 并在右侧部分中输入数组名称?
问题是 UITableView 及其委托和数据源的非常简单的实现。
实际的解释有点长,所以这里有一个应用程序的教程,它的功能与您想要的非常相似。
http://www.appcoda.com/ios-programming-index-list-uitableview/
您可以遍历数组以创建一个字典,其中首字母为键,名称数组为值:
在Swift
var nameDictionary: Dictionary<String, Array<String>> = [:]
for name in nameArray {
var key = name[0].uppercaseString // first letter of the name is the key
if let arrayForLetter = nameDictionary[key] { // if the key already exists
arrayForLetter.append(name) // we update the value
nameDictionary.updateValue(arrayForLetter, forKey: key) // and we pass it to the dictionary
} else { // if the key doesn't already exists in our dictionary
nameDictionary.updateValue([name], forKey: key) // we create an array with the name and add it to the dictionary
}
}
在 Obj-C 中
NSMutableDictionary *nameDictionary = [[NSMutableDictionary alloc] init];
for name in nameArray {
NSString *key = [[name substringToIndex: 1] uppercaseString];
if [nameDictionary objectForKey:key] != nil {
NSMutableArray *tempArray = [nameDictionary objectForKey:key];
[tempArray addObject: name];
[nameDictionary setObject:tempArray forkey:key];
} else {
NSMutableArray *tempArray = [[NSMutableArray alloc] initWithObjects: name, nil];
[nameDictionary setObject:tempArray forkey:key];
}
}
然后您可以使用 nameDictionary.count 获取您的部分数量,使用 nameDictionary[key].count 获取行数,使用 nameDictionary[key] 获取特定部分中行的内容,这将return key
中存储的以字母开头的所有名称的数组
编辑: 将其与 Piterwilson 的答案相结合以获得完整答案
编辑 2:添加了 Obj-C 代码
注意:由于本人不在mac,代码中可能会有小错误,但原理是一样的
我有一个包含字符串格式名称的数组 (es.luca,marco,giuseppe,..)。 该数组将用于填充 table。 如何将 table 分成多个部分 (az) 并在右侧部分中输入数组名称?
问题是 UITableView 及其委托和数据源的非常简单的实现。
实际的解释有点长,所以这里有一个应用程序的教程,它的功能与您想要的非常相似。
http://www.appcoda.com/ios-programming-index-list-uitableview/
您可以遍历数组以创建一个字典,其中首字母为键,名称数组为值:
在Swift
var nameDictionary: Dictionary<String, Array<String>> = [:]
for name in nameArray {
var key = name[0].uppercaseString // first letter of the name is the key
if let arrayForLetter = nameDictionary[key] { // if the key already exists
arrayForLetter.append(name) // we update the value
nameDictionary.updateValue(arrayForLetter, forKey: key) // and we pass it to the dictionary
} else { // if the key doesn't already exists in our dictionary
nameDictionary.updateValue([name], forKey: key) // we create an array with the name and add it to the dictionary
}
}
在 Obj-C 中
NSMutableDictionary *nameDictionary = [[NSMutableDictionary alloc] init];
for name in nameArray {
NSString *key = [[name substringToIndex: 1] uppercaseString];
if [nameDictionary objectForKey:key] != nil {
NSMutableArray *tempArray = [nameDictionary objectForKey:key];
[tempArray addObject: name];
[nameDictionary setObject:tempArray forkey:key];
} else {
NSMutableArray *tempArray = [[NSMutableArray alloc] initWithObjects: name, nil];
[nameDictionary setObject:tempArray forkey:key];
}
}
然后您可以使用 nameDictionary.count 获取您的部分数量,使用 nameDictionary[key].count 获取行数,使用 nameDictionary[key] 获取特定部分中行的内容,这将return key
中存储的以字母开头的所有名称的数组编辑: 将其与 Piterwilson 的答案相结合以获得完整答案
编辑 2:添加了 Obj-C 代码
注意:由于本人不在mac,代码中可能会有小错误,但原理是一样的