在swift中的表格视图中按字母顺序排列的部分

我有一个按字母顺序排列的名称列表,现在我想在表格视图中显示这些名字。 我正在努力为每个字母分组这些名字。

我的代码如下所示:

let sections:Array<AnyObject> = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"] var usernames = [String]() func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{ let cellID = "cell" let cell: UITableViewCell = self.tv.dequeueReusableCellWithIdentifier(cellID) as UITableViewCell cell.textLabel?.text = usernames[indexPath.row] return cell } func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{ return usernames.count } func numberOfSectionsInTableView(tableView: UITableView) -> Int{ return 26 } func sectionIndexTitlesForTableView(tableView: UITableView) -> [AnyObject]!{ return self.sections } func tableView(tableView: UITableView, sectionForSectionIndexTitle title: String, atIndex index: Int) -> Int{ return index } func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String?{ return self.sections[section] as? String } 

除了使我的表视图结束的分组之外,这一切都很好:

在这里输入图像说明

所以我知道你应该可以使用数组中的过滤函数,但我不明白如何实现它。

任何build议如何进行,将不胜感激。

你可以把你的数组与名称字典与字母键。

例如

 var names = ["a": ["and", "array"], "b": ["bit", "boring"]]; // dictionary with arrays setted for letter keys 

那么你需要通过下面的方式访问字典中的值

 func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{ return names[usernames[section]].count; // maybe here is needed to convert result of names[...] to NSArray before you can access count property } func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{ let cellID = "cell" let cell: UITableViewCell = self.tv.dequeueReusableCellWithIdentifier(cellID) as UITableViewCell cell.textLabel?.text = names[usernames[indexPath.section]][indexPath.row]; // here you access elements in arrray which is stored in names dictionary for usernames[indexPath.section] key return cell } 

这是我最近如何在Swift中以编程方式实现了sorting列表,

 import UIKit class BreedController: UITableViewController{ var breeds = ["A": ["Affenpoo", "Affenpug", "Affenshire", "Affenwich", "Afghan Collie", "Afghan Hound"], "B": ["Bagle Hound", "Boxer"]] struct Objects { var sectionName : String! var sectionObjects : [String]! } var objectArray = [Objects]() override func viewDidLoad() { super.viewDidLoad() tableView.delegate = self tableView.dataSource = self tableView.registerClass(UITableViewCell.classForCoder(), forCellReuseIdentifier: "Cell") // SORTING [SINCE A DICTIONARY IS AN UNSORTED LIST] var sortedBreeds = sorted(breeds) { $0.0 < $1.0 } for (key, value) in sortedBreeds { println("\(key) -> \(value)") objectArray.append(Objects(sectionName: key, sectionObjects: value)) } } override func numberOfSectionsInTableView(tableView: UITableView) -> Int { return objectArray.count } override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return objectArray[section].sectionObjects.count } override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! UITableViewCell // SETTING UP YOUR CELL cell.textLabel?.text = objectArray[indexPath.section].sectionObjects[indexPath.row] return cell } override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? { return objectArray[section].sectionName } } 

下载CountryList Json文件,放在你的项目

https://gist.github.com/keeguon/2310008

  var json = NSArray() var arr_name = NSArray() var arrIndexSection : NSArray = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"] override func viewDidLoad() { let path = Bundle.main.path(forResource: "countries", ofType: "json") let data = NSData(contentsOfFile: path! ) json = (try! JSONSerialization.jsonObject(with: data as! Data, options: JSONSerialization.ReadingOptions.mutableContainers)) as! NSArray arr_name = json.value(forKey: "name") as! NSArray; tableview.reloadData() super.viewDidLoad() } // Side List in tableview public func numberOfSections(in tableView: UITableView) -> Int { return 26 } public func sectionIndexTitles(for tableView: UITableView) -> [String]? { return self.arrIndexSection as? [String] //Side Section title } public func tableView(_ tableView: UITableView, sectionForSectionIndexTitle title: String, at index: Int) -> Int { return index } public func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { return arrIndexSection.object(at: section) as? String } // number of rows in table view public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { let predicate = NSPredicate(format: "SELF beginswith[c] %@", arrIndexSection.object(at: section) as! CVarArg) let arrContacts = (arr_name as NSArray).filtered(using: predicate) return arrContacts.count; } public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell : TableViewCell=self.tableview.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TableViewCell let predicate = NSPredicate(format: "SELF beginswith[c] %@", arrIndexSection.object(at: indexPath.section) as! CVarArg) let arrContacts = (arr_name as NSArray).filtered(using: predicate) as NSArray cell.textLabel?.text = arrContacts.object(at: indexPath.row) as? String return cell }