Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何按字母顺序排列UITableView?_Ios_Arrays_Swift_Uitableview - Fatal编程技术网

Ios 如何按字母顺序排列UITableView?

Ios 如何按字母顺序排列UITableView?,ios,arrays,swift,uitableview,Ios,Arrays,Swift,Uitableview,我创建了一个UITableView,它从一个txt.file文件获取数据。 但是,尽管txt文件是按字母顺序排序的,但UITableView不是 有人知道如何按字母顺序排序吗 我使用的是Swift 3和Xcode 8 var dictA = [String:String]() var filtereddictA = [String:String]() var visibleA = [ String ]() var searchController = UISearchController()

我创建了一个
UITableView
,它从一个txt.file文件获取数据。 但是,尽管txt文件是按字母顺序排序的,但UITableView不是

有人知道如何按字母顺序排序吗

我使用的是Swift 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
}
var dictA=[String:String]()
var filteredticta=[String:String]()
var visibleA=[String]()
var searchController=UISearchController()
重写func viewDidLoad(){
super.viewDidLoad()
让path=Bundle.main.path(forResource:“a”,类型为“txt”)
让filemgr=FileManager.default
如果filemgr.fileExists(atPath:path!){
做{
让fullText=try字符串(contentsOfFile:path!,encoding:String.encoding.utf8)
让读数=全文。组件(以“\n”分隔)
在阅读资料中使用abteilungen{
设aData=abteilungen.components(用“\t”分隔)
如果abteilungenData.count>1{
格言[aData[0]]=aData[1]
}
}
filteredicta=dictA
}捕捉错误{
打印(“错误:\(错误)”)
}
searchController=UISearchController(searchResultsController:nil)
searchController.SearchResultsUpdate=self
searchController.dimsBackgroundDuringPresentation=false
searchController.searchBar.sizeToFit()
tableView.tableHeaderView=searchController.searchBar
DefinePresentationContext=true
}
self.title=“A”
}
//标记:-表视图数据源
重写func numberOfSections(在tableView:UITableView中)->Int{
//#警告未完成执行,返回节数
返回1
}
重写func tableView(tableView:UITableView,numberofrowsinssection:Int)->Int{
返回filteredicta.count
}
重写func tableView(tableView:UITableView,cellForRowAt indexath:indexPath)->UITableViewCell{
let cell=tableView.dequeueReusableCell(带有标识符:“cell”,用于:indexath)
let key=Array(filtereddita.keys)[indexPath.row]
cell.textLabel?.text=key
cell.detailtextlab?.text=filtereddita[key]
返回单元
}
@可用(iOS 8.0,*)
public func updateSearchResults(对于searchController:UISearchController){
guard let searchText=searchController.searchBar.text?.lowercased()else{
返回
}
让keyPositions=数组(filtereddita.keys)
filteredticta=[:]
var removerary=[IndexPath]()
var addArray=[IndexPath]()
口述中的ab{
如果abteilung.key.lowercased().range(of:searchText)!=nil | | a.value.lowercased().range(of:searchText)!=nil | | searchText.isEmpty{
filtereddita[ab.key]=ab.value
}否则{
如果let index=keyPositions.index(of:abteilung.key){
append(IndexPath(行:索引,节:0))
}
}
}
如果removeArray.count>0{
排序(按:{(p1,p2)->Bool-in
返回p1.row>p2.row
})
tableView.deleteRows(位于:removeArray,带:。底部)
}
变量i=0
对于Filteredicta.key中的ab{
if!keyPositions.contains(ab){
append(IndexPath(项:i,节:0))
}
i+=1
}
如果addArray.count>0{
排序方式:{(p1,p2)->Bool-in
返回p1.rowInt{
返回filteredicta.count
}

您应该设置数据源中元素的正确顺序。 我可以假设,
filtereditctabteilungen
是字典,您就是数据源

因此,首先对其进行排序,然后通过
tableView
进行填充

例如:

let dictionary = [
    "A" : [1, 2],
    "Z" : [3, 4],
    "D" : [5, 6]
]

let sortedKeys = dictionary.sorted(by: { $0.0 < $1.0 })
let字典=[
“A”:[1,2],
“Z”:[3,4],
“D”:[5,6]
]
让sortedKeys=dictionary.sorted(按:{$0.0<$1.0})

您应该设置数据源中元素的正确顺序。 我可以假设,
filtereditctabteilungen
是字典,您就是数据源

因此,首先对其进行排序,然后通过
tableView
进行填充

例如:

let dictionary = [
    "A" : [1, 2],
    "Z" : [3, 4],
    "D" : [5, 6]
]

let sortedKeys = dictionary.sorted(by: { $0.0 < $1.0 })
let字典=[
“A”:[1,2],
“Z”:[3,4],
“D”:[5,6]
]
让sortedKeys=dictionary.sorted(按:{$0.0<$1.0})

请提供用于读取文本文件、文本文件本身和表视图数据源的代码。编辑它@George Green字典不会排序,因此当您调用
数组(Filtereditctabteilungen.keys)[indexPath.row]
时,它会从字典键创建一个数组,但您不会对它们进行排序。最好创建一个简单的结构来存储数据(而不是键值对),并在创建数据时对其进行一次排序。将在一分钟内发布如何执行此操作。请参阅下面@Oleg的答案,它为您提供了一个可在数据源中使用的元组值的排序列表。请不要破坏您的后处理程序。请提供您用于读取文本文件、文本文件本身和表视图数据源的代码。编辑后的代码@George Green字典不排序,因此,当您调用
数组(filtereditctabteilungen.keys)[indexPath.row]
时,它会根据字典键创建一个数组,但您不会对它们进行排序。最好创建一个简单的结构来存储数据(而不是键值对),并在创建数据时对其进行一次排序。将在一分钟内发布如何执行此操作。请参阅下面@Oleg的答案,它为您提供了一个可在数据源中使用的元组值的排序列表。请不要破坏您的postMy数据源是一个txt文件,该dict称为“dictAbteilungen”数组“FilterEditctAbteIlungen”仅是使用搜索栏搜索内容后应显示的数组。我还是不知道该怎么做:(试着先对dictAbteliungen排序好的,我会帮你的。现在