UISearchBar在一个数组中的字符串

UISearchBar在一个数组中的字符串

问题描述:

enter image description hereenter image description hereenter image description hereenter image description here我想创建一个字典类型的应用程序的部分标题,标题文本和字幕文本。我设法使用下面的代码让所有的东西都能工作。我唯一不知道的是如何过滤UISearchBar以显示数组内的字符串[Coptic]的结果。这甚至可能是我组织一切的方式,还是我需要重组?有没有人有什么建议?UISearchBar在一个数组中的字符串

我遗漏了底部的updateSearchResults空白代码,因为我不知道要编码什么。

class Gamma: UITableViewController, UISearchBarDelegate, UISearchResultsUpdating { 


    struct words { 

     var sectionName : String! 
     var coptic : [String]! 
     var english : [String]! 
    } 

    var array = [words]() 
    var filtered = [words]() 
    var filtered2 = UITableViewController() 

    var indexarray = ["Ga", "Ge", "Gy", "Gn", "Go", "Gr", "Gw"] 

    let searchController = UISearchController(searchResultsController: nil) 




    override func viewDidLoad() { 
     super.viewDidLoad() 


     let defaultTextAttribs = [NSAttributedStringKey.font.rawValue: UIFont(name:"CS Avva Shenouda", size:17), NSAttributedStringKey.foregroundColor.rawValue:UIColor.black] 


     UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).defaultTextAttributes = defaultTextAttribs as Any as! [String : Any] 


     self.navigationController?.navigationBar.tintColor = UIColor.white 

     filtered = array 

     searchController.searchResultsUpdater = self 
     searchController.hidesNavigationBarDuringPresentation = false 
     searchController.dimsBackgroundDuringPresentation = false 


     self.navigationItem.titleView = searchController.searchBar 

     tableView.rowHeight = UITableViewAutomaticDimension 
     tableView.estimatedRowHeight = 400 
     tableView.sectionHeaderHeight = 40 
     tableView.sectionIndexBackgroundColor = UIColor.clear 
     tableView.sectionIndexMinimumDisplayRowCount = 15 


     array = [words(sectionName: "Ga", coptic: ["Gabriyl", "gaza", "gazovulakion", "gala", "galynyc", "Galile`a", "galileoc", "gamoc", "gar"], english: ["ghabriyēl\n\n(Heb.) - Gabriel", "ghå`zå\n\n(f.) - Treasure, money chest", "ghåzo`filåk`yon\n\n(Gk.) - Treasury", "ghå`lå\n\n(Gk. m.) - Milk", "ghålēnēs\n\n(Gk. f.) - Gentle, calm", "ghålilā`å\n\nGalilee", "ghålilā`os\n\n(adj.) - Galilean", "ghåmos/gåmos\n\n(Gk. m.) - Wedding, marriage", "ghår\n\n(Gk. conj.) - For, because"]), 
     words(sectionName: "Ge", coptic: ["geenna", "gene`a", "genecic", "genneoc", "gennyma", "gennycic", "gennytyc", "gennytria", "genoc", "Gewrgioc"], english: ["ge`ā`nå\n\n(Heb.) - Gehenna, Hades", "gene`å\n\n1. (Gk. f.) - Generation\n\n2. (Gk. f.) - New, recent", "genesis\n\n(Gk. f.) - Birth, start, inception", "gennā`os\n\n(Gk. adj.) - Brave, noble, honorable, good", "gennē`må\n\n(Gk. m.) - Offspring, product", "gennē`sis\n\n(Gk. f.) - Birth, generation", "gennē`tēs\n\n(Gk. m.) - Parent, generator", "gennēt`riyā\n\n(Gk. f.) - Parent, generator", "gā`nos\n\n(Gk. m.) - Race, tribe", "ge`ōrgi`yos\n\nGeorge"]), 
       words(sectionName: "Gy", coptic: ["gy"], english: ["gē\n\n(Gk. f.) - Earth, ground, land"]), 
       words(sectionName: "Gn", coptic: ["gnovoc", "gnwmy", "gnwcic"], english: ["ghno`fos\n\n(Gk. m.) - Darkness, gloom", "ghnō`mē\n\n(Gk. f.) - Opinion, thought, judgement", "ghnō`sis\n\n(Gk. f.) - Knowledge"]), 
       words(sectionName: "Go", coptic: ["Golgo;a", "Gomorra", "gonato"], english: ["gholghothå\n\n(Heb. f.) - Calvary, Golgotha", "ghomorrå\n\n(Heb.) - Gomorrah", "ghonå`to\n\n(Gk.) - Knee"]), 
       words(sectionName: "Gr", coptic: ["grammateuc", "grammatiky", "gravy"], english: ["gråmmå`tevs\n\n(Gk. m.) - Scribe, secretary", "gråmmå`tikē\n\n(Gk. f.) - Grammar", "ghrå`fē\n\n(Gk. f.) - Writing, drawing, book"]), 
       words(sectionName: "Gw", coptic: ["Gwg"], english: ["gōg\n\nGog"]), 

     ] 


    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    // MARK: - Table view data source 

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as UITableViewCell! 

     cell?.textLabel?.text = array[indexPath.section].coptic[indexPath.row] 
     cell?.detailTextLabel?.text = array[indexPath.section].english[indexPath.row] 
     cell?.textLabel?.font = UIFont(name:"CS Avva Shenouda", size:30) 
     cell?.detailTextLabel?.font = UIFont(name: "Constantia", size:25) 
     cell?.textLabel?.numberOfLines = 0 
     cell?.detailTextLabel?.numberOfLines = 0 
     cell?.textLabel?.textColor = UIColor.black 
     cell?.detailTextLabel?.textColor = UIColor.darkGray 

     return cell! 
    } 


    override func numberOfSections(in tableView: UITableView) -> Int { 
     return array.count 
    } 

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return array[section].coptic.count 

    } 

    override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 
     return array[section].sectionName 

    } 

    override func sectionIndexTitles(for tableView: UITableView) -> [String]? { 
     return indexarray 
    } 

    override var preferredStatusBarStyle: UIStatusBarStyle { 
     return .lightContent 
    } 

    override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) 
    { 
     let header = view as! UITableViewHeaderFooterView 
     header.textLabel?.font = UIFont(name: "CS Avva Shenouda", size: 25)! 
     header.textLabel?.textColor = UIColor.black 
     header.backgroundView?.backgroundColor = UIColor.lightGray 

    } 

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
     print("Row \(indexPath.row) selected") 
    } 

    func updateSearchResults(for searchController: UISearchController) { 
     if searchController.searchBar.text! == "" { 


     } else { 


     } 

    } 


} 
+1

正是你想要过滤后的结果截图什么。 (因为你声明过滤的数组,但不是在tableview中使用) –

+1

假设我输入“gal”输出是什么 –

+1

okey即使我添加解决方案希望它适用于你.. –

我揣摩你的问题希望你希望下面的代码获取输出

enter image description here

// 
// ViewController.swift 
// Testing 
// 
// Created by Jaydeep on 28/10/17. 


    import UIKit 

    class Gamma: UITableViewController, UISearchBarDelegate, UISearchResultsUpdating,UISearchControllerDelegate { 


     struct words { 

      var coptic : [String]! 
      var english : [String]! 
     } 

     var array = [words]() 
     var filtered = [words]() 
     var filtered2 = UITableViewController() 



     let searchController = UISearchController(searchResultsController: nil) 




     override func viewDidLoad() { 
      super.viewDidLoad() 


      let defaultTextAttribs = [NSAttributedStringKey.font.rawValue: UIFont.systemFont(ofSize: 17), NSAttributedStringKey.foregroundColor.rawValue:UIColor.black] 


      UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).defaultTextAttributes = defaultTextAttribs as Any as! [String : Any] 


      self.navigationController?.navigationBar.tintColor = UIColor.white 


      searchController.searchBar.delegate = self 
      searchController.searchResultsUpdater = self 
      searchController.hidesNavigationBarDuringPresentation = false 
      searchController.dimsBackgroundDuringPresentation = false 
      searchController.delegate = self 

      self.navigationItem.titleView = searchController.searchBar 

      tableView.rowHeight = UITableViewAutomaticDimension 
      tableView.estimatedRowHeight = 400 
      tableView.sectionHeaderHeight = 40 
      tableView.sectionIndexBackgroundColor = UIColor.clear 
      tableView.sectionIndexMinimumDisplayRowCount = 15 


      array = [words(coptic: ["Gabriyl", "gaza", "gazovulakion", "gala", "galynyc", "Galile`a", "galileoc", "gamoc", "gar"], english: 
       ["ghabriyēl \n\n(Heb.) - Gabriel", "ghå`zå\n\n(f.) - Treasure,money chest", "ghåzo`filåk`yon\n\n(Gk.) - Treasury", "ghå`lå\n\n(Gk. m.) - Milk", "ghålēnēs\n\n(Gk. f.) - Gentle, calm", "ghålilā`å\n\nGalilee", "ghålilā`os\n\n(adj.) - Galilean", "ghåmos/gåmos\n\n(Gk. m.) - Wedding, marriage", "ghår\n\n(Gk. conj.) - For, because"]), 
        words(coptic: ["geenna", "gene`a", "genecic", "genneoc", "gennyma", "gennycic", "gennytyc", "gennytria", "genoc", "Gewrgioc"], english: ["ge`ā`nå\n\n(Heb.) - Gehenna, Hades", "gene`å\n\n1. (Gk. f.) - Generation\n\n2. (Gk. f.) - New, recent", "genesis\n\n(Gk. f.) - Birth, start, inception", "gennā`os\n\n(Gk. adj.) - Brave, noble, honorable, good", "gennē`må\n\n(Gk. m.) - Offspring, product", "gennē`sis\n\n(Gk. f.) - Birth, generation", "gennē`tēs\n\n(Gk. m.) - Parent, generator", "gennēt`riyā\n\n(Gk. f.) - Parent, generator", "gā`nos\n\n(Gk. m.) - Race, tribe", "ge`ōrgi`yos\n\nGeorge"]), 
        words(coptic: ["gy"], english: ["gē\n\n(Gk. f.) - Earth, ground, land"]), 
        words(coptic: ["gnovoc", "gnwmy", "gnwcic"], english: ["ghno`fos\n\n(Gk. m.) - Darkness, gloom", "ghnō`mē\n\n(Gk. f.) - Opinion, thought, judgement", "ghnō`sis\n\n(Gk. f.) - Knowledge"]), 
        words(coptic: ["Golgo;a", "Gomorra", "gonato"], english: ["gholghothå\n\n(Heb. f.) - Calvary, Golgotha", "ghomorrå\n\n(Heb.) - Gomorrah", "ghonå`to\n\n(Gk.) - Knee"]), 
        words(coptic: ["grammateuc", "grammatiky", "gravy"], english: ["gråmmå`tevs\n\n(Gk. m.) - Scribe, secretary", "gråmmå`tikē\n\n(Gk. f.) - Grammar", "ghrå`fē\n\n(Gk. f.) - Writing, drawing, book"]), 
        words(coptic: ["Gwg"], english: ["gōg\n\nGog"]), 

      ] 
      filtered = array 


     } 
     func searchBarCancelButtonClicked(_ searchBar: UISearchBar) { 
      searchBar.text = "" 
      // Hide the cancel button 
      searchBar.showsCancelButton = false 
      filtered = array 
      tableView.reloadData() 
     } 
     override func didReceiveMemoryWarning() { 
      super.didReceiveMemoryWarning() 
      // Dispose of any resources that can be recreated. 
     } 

     // MARK: - Table view data source 
    override func numberOfSections(in tableView: UITableView) -> Int { 
    if filtered.count > 0 

    { 
     return filtered.count 
    } 
    else 
    { 
     return 0 
    } 
} 
     override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
      let cellIdentifier = "cell" 
      var cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier) 
      if cell == nil 
      { 
       cell = UITableViewCell(style: UITableViewCellStyle.value2, reuseIdentifier: cellIdentifier) 
      } 
      cell?.textLabel?.text = filtered[indexPath.section].coptic[indexPath.row] 
      cell?.detailTextLabel?.text = filtered[indexPath.section].english[indexPath.row] 
      cell?.textLabel?.font = UIFont.systemFont(ofSize: 20) 
      cell?.detailTextLabel?.font = UIFont.systemFont(ofSize: 15) 
      cell?.textLabel?.numberOfLines = 0 
      cell?.detailTextLabel?.numberOfLines = 0 
      cell?.textLabel?.textColor = UIColor.black 
      cell?.detailTextLabel?.textColor = UIColor.darkGray 

      return cell! 
     } 

     override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
      return UITableViewAutomaticDimension 
     } 


     override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

      if filtered.count > 0 
      { 
       return filtered[section].coptic.count 
      } 
      else 
      { 
      return 0 
      } 
     } 

     override var preferredStatusBarStyle: UIStatusBarStyle { 
      return .lightContent 
     } 

     override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
      print("Row \(indexPath.row) selected") 
     } 

     func updateSearchResults(for searchController: UISearchController) { 
      // If we haven't typed anything into the search bar then do not filter the results 
      if searchController.searchBar.text! == "" 
      { 
       filtered = array 
      } 
      else 
      { 
       filtered.removeAll() 
       for i:Int in 0 ..< array.count 
        { 
         var copticArray:[String] = [] 
         var englishArray:[String] = [] 
         var tempWord:words = words.init(coptic: [], english: []) 


         let copticCount = array[i].coptic.count 
         for copticIndex:Int in 0 ..< copticCount 
         { 
          if array[i].coptic[copticIndex].lowercased().contains(searchController.searchBar.text!.lowercased()) 
          { 

           copticArray.append(array[i].coptic[copticIndex]) 
           englishArray.append(array[i].english[copticIndex]) 

          } 
         } 

         tempWord.coptic = copticArray 
         tempWord.english = englishArray 
         if (copticArray.count > 0) 
         { 
          self.filtered.append(tempWord) 
         } 
        } 
       tableView.reloadData() 

      } 
     } 


    } 
+0

我得到它的工作。非常感谢。你有没有机会知道如何改变索引数组的字体? –

+0

好,所以这个代码实际上工作时单元格设置为自定义。但是当单元格被设置为字幕时,这是我想要的格式,当我搜索单词时它会崩溃。为什么会发生这种情况的任何原因? –

+0

为了更清楚一点,我想过滤使用coptic字符串并将其显示为单元格textlabel,同时还在detailtextlabel中显示相应的英文字符串。这是可能吗? –