Ich habe eine UITableView
erstellt, die ihre Daten aus einer txt.file bezieht. Obwohl die txt-Datei alphabetisch sortiert ist, ist dies bei UITableView nicht der Fall.Wie kann ich mein UITableView alphabetisch bestellen?
Kann jemand alphabetisch sortieren/sortieren?
Ich bin mit Swift 3 und Xcode 8.
var dictA = [String:String]()
var filtereddictA = [String:String]()
var visibleA = [ String ]()
var searchController = UISearchController()
override func viewDidLoad() {
super.viewDidLoad()
let path = Bundle.main.path(forResource: "a", ofType:"txt")
let filemgr = FileManager.default
if filemgr.fileExists(atPath: path!) {
do {
let fullText = try String(contentsOfFile: path! ,encoding: String.Encoding.utf8)
let readings = fullText.components(separatedBy: "\n")
for abteilungen in readings {
let aData = abteilungen.components(separatedBy: "\t")
if abteilungenData.count > 1 {
dictA[aData[0]] = aData[1]
}
}
filtereddictA = dictA
} catch let error {
print("Error: \(error)")
}
searchController = UISearchController (searchResultsController: nil)
searchController.searchResultsUpdater = self
searchController.dimsBackgroundDuringPresentation = false
searchController.searchBar.sizeToFit()
tableView.tableHeaderView = searchController.searchBar
definesPresentationContext = true
}
self.title = "A"
}
// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return filtereddictA.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
let key = Array(filtereddictA.keys)[indexPath.row]
cell.textLabel?.text = key
cell.detailTextLabel?.text = filtereddictA[key]
return cell
}
@available(iOS 8.0, *)
public func updateSearchResults(for searchController: UISearchController) {
guard let searchText = searchController.searchBar.text?.lowercased() else {
return
}
let keyPositions = Array(filtereddictA.keys)
filtereddictA = [:]
var removeArray = [ IndexPath ]()
var addArray = [ IndexPath ]()
for ab in dictA {
if abteilung.key.lowercased().range(of: searchText) != nil || a.value.lowercased().range(of: searchText) != nil || searchText.isEmpty {
filtereddictA[ab.key] = ab.value
} else {
if let index = keyPositions.index(of: abteilung.key) {
removeArray.append(IndexPath(row: index, section: 0))
}
}
}
if removeArray.count > 0 {
removeArray.sort(by: { (p1,p2) -> Bool in
return p1.row > p2.row
})
tableView.deleteRows(at: removeArray, with: .bottom)
}
var i = 0
for ab in filtereddictA.keys {
if !keyPositions.contains(ab) {
addArray.append(IndexPath(item: i, section: 0))
}
i += 1
}
if addArray.count > 0 {
addArray.sort(by: { (p1,p2) -> Bool in
return p1.row < p2.row
})
tableView.insertRows(at: addArray, with: .bottom)
}
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return filtereddictA.count
}
Bitte geben Sie den Code, den Sie verwenden die Textdatei, die Textdatei selbst und die Tabellen-Ansicht-Datenquelle zu lesen. –
editiert @George Green – user7630200
Dictionarys sind nicht sortiert, wenn Sie 'Array (filededictAbteilen.keys) [indexPath.row]' aufrufen, wird ein Array aus Ihren Dictionary Keys erstellt, aber Sie sortieren sie nicht. Es wäre besser, wenn Sie eine einfache Struktur zum Speichern Ihrer Daten erstellen (anstatt eines Schlüsselwertpaares) und sie einmal beim Erstellen sortieren. Wird posten, wie dies in einem min. –