私はUITableView
を作成し、そのデータをtxt.fileから取得します。 しかし、txt-Fileはアルファベット順にソートされていますが、UITableViewはソートされていません。UITableViewをどのようにアルファベット順に並べ替えることができますか?
アルファベット順に並べ替える方法は誰にも分かりますか?
私はあなたがデータソース内の要素の適切な順序を設定する必要がありスウィフト3と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
}
テキストファイル、テキストファイル自体、およびテーブルビューのデータソースを読み取るために使用しているコードを入力してください。 –
@George Green – user7630200
辞書はソートされていないので、 'Array(filtereddictAbteilungen.keys)[indexPath.row]'を呼び出すと辞書キーから配列が作成されますが、並べ替えはしません。キー値のペアではなくデータを格納するシンプルな構造体を作成し、作成するときに一度ソートする方が良いでしょう。これを分単位で行う方法を投稿します。 –