数组中string的UISearchBar

在这里输入图像说明 在这里输入图像说明 在这里输入图像说明 在这里输入图像说明 我正在尝试创build一个带有节标题,标题文本和字幕文本的字典types的应用程序。 我设法让一切工作使用下面的代码。 唯一我无法弄清楚的是如何过滤UISearchBar来显示数组中的string[Coptic]的结果。 这甚至可能是我组织一切的方式,还是我需要重组? 有没有人有什么build议?

我遗漏了底部的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 { } } } 

我试图找出你的问题,希望你想要下面的代码得到输出

在这里输入图像说明

 // // 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() } } }