2017-03-10 4 views
0

私は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 
} 
+0

テキストファイル、テキストファイル自体、およびテーブルビューのデータソースを読み取るために使用しているコードを入力してください。 –

+0

@George Green – user7630200

+0

辞書はソートされていないので、 'Array(filtereddictAbteilungen.keys)[indexPath.row]'を呼び出すと辞書キーから配列が作成されますが、並べ替えはしません。キー値のペアではなくデータを格納するシンプルな構造体を作成し、作成するときに一度ソートする方が良いでしょう。これを分単位で行う方法を投稿します。 –

答えて

3

を使用しています。 filtereddictAbteilungenは、あなたがデータソースの辞書であることを前提にしています。

だからまずそれをソートして、それはtableViewで入力します。

例:

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

let sortedKeys = dictionary.sorted(by: { $0.0 < $1.0 }) 
+0

私のデータソースはtxtファイルであり、dictは "dictAbteilungen"と呼ばれています。配列 "filtereddictAbteilungen"は、検索バーで何かを検索した後に表示される配列だけです。私はまだそれを行う方法は実際にはありません:( – user7630200

+0

最初にdictAbteliungenをソートしようとします –

+0

私はまだ申し訳ありませんが、私はまだ方法がわからない:(私は絶対初心者です... – user7630200

関連する問題