我有一個顯示工作人員,職能,員工等一個簡單的應用程序...索引的TableView(A至Z)工作不正常
我插入了搜索欄,它是偉大的工作!但我有一些困難的索引TableView(我決定使用UILocalizedIndexedCollation
)。在我的主要TableViewController看看:
import UIKit
class Page1: UITableViewController, UISearchBarDelegate {
@IBOutlet weak var searchBar: UISearchBar!
var employeesSearching = [Employee]()
var isSearching : Bool = false
let collation = UILocalizedIndexedCollation.current()
var sections: [[AnyObject]] = []
var objects: [AnyObject] = [] {
didSet {
let selector: Selector = #selector(getter: UIApplicationShortcutItem.localizedTitle)
sections = Array(repeating: [], count: collation.sectionTitles.count)
let sortedObjects = collation.sortedArray(from: objects, collationStringSelector: selector)
for object in sortedObjects {
let sectionNumber = collation.section(for: object, collationStringSelector: selector)
sections[sectionNumber].append(object as AnyObject)
}
self.tableView.reloadData()
}
}
override func viewDidLoad() {
super.viewDidLoad()
self.searchBar.delegate = self
self.tableView.contentOffset = CGPoint(x: 0, y: searchBar.frame.height)
}
override func numberOfSections(in tableView: UITableView) -> Int { return sections.count }
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return isSearching ? employeesSearching.count : sections[section].count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TableViewCell1
let entry = isSearching ? employeesSearching[indexPath.row] : Shared.instance.employees[indexPath.row]
//Do I have to put (sections[indexPath.section][indexPath.row]) here? ok, but how?
cell.nameLabel.text = entry.name
cell.positionLabel.text = entry.position
return cell
}
override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return collation.sectionTitles[section]
}
override func sectionIndexTitles(for tableView: UITableView) -> [String]? {
return collation.sectionIndexTitles
}
override func tableView(_ tableView: UITableView, sectionForSectionIndexTitle title: String, at index: Int) -> Int {
return collation.section(forSectionIndexTitle: index)
}
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if self.searchBar.text!.isEmpty {
self.isSearching = false
self.tableView.reloadData()
} else {
self.isSearching = true
self.employeesSearching.removeAll(keepingCapacity: false)
let searchText = self.searchBar.text!.lowercased()
for employee in Shared.instance.employees {
if employee.name.lowercased().range(of: searchText) != nil {
self.employeesSearching.append(employee)
}
}
}
self.tableView.reloadData()
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "ShowP2" {
if let indexPath = tableView.indexPathForSelectedRow {
let employee: Employee
isSearching == true && searchBar.text != "" ?
(employee = employeesSearching[indexPath.row]) : (employee = Shared.instance.employees[indexPath.row])
let destination = segue.destination as? Page2
destination?.newPage = employee
}
}
}
}
編輯1:我的數據
我從一個plist中由AppDelegate中導入我的數據:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
if let url = Bundle.main.url(forResource: "directory", withExtension: "plist"), let array = NSArray(contentsOf: url) as? [[String:Any]] {
Shared.instance.employees = array.map{Employee(dictionary: $0)}
}
return true
}
這是在我使用UILocalizedIndexedCollation
之前一切正常(並且不是空的),但現在它全部爲空:
您面臨的問題是什麼? –
TableView是空的,因爲我不知道如何在func上使用部分'cellForRowAt' –