2017-09-22 41 views
0

我想實現一個搜索欄到我的SWIFT應用程序,我已經成功地這樣做,但由於某種原因,當我去搜索任何東西時,在我的表視圖中顯示任何幫助將不勝感激。搜索欄不工作在IOS應用程序swift 3

這裏是我的控制器

import UIKit 
import AudioToolbox 


class TableController: UITableViewController, UISearchBarDelegate{ 


    var PhoneArray = [String]() 

    var filtered:[String] = [] 

    var searchActive = false 



    @IBOutlet weak var searchBar: UISearchBar! 




    override func viewDidLoad() { 
     super.viewDidLoad() 
     tableView.dataSource = self 
     tableView.delegate = self 
     searchBar.delegate = self 
     searchBar.returnKeyType = UIReturnKeyType.done 
     getData("http://phonedir.mydomain.com/getPhoneList") 
    } 


    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     if(searchActive) 
     { 
      print("Search") 
      return filtered.count 

     } 
     return PhoneArray.count 
    } 


    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) { 

     if searchBar.text == nil || searchBar.text == "" { 

      searchActive = false 
      print("search not active") 
      view.endEditing(true) 

      tableView.reloadData() 

     } else { 

      searchActive = true 
      print("search is active") 
      filtered = PhoneArray.filter({$0 == searchBar.text}) 

      tableView.reloadData() 
     } 
    } 

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

     //let phone = PhoneData[indexPath.row] 
     //let name = indexPath.row 
     if(searchActive) 
     { 
      let array = filtered[indexPath.row] 
      //print("search Active") 
      cell.textLabel?.text = array.replacingOccurrences(of: " ", with: "").replacingOccurrences(of: "[", with: " ").replacingOccurrences(of: "]", with: " ").replacingOccurrences(of: "&", with: "*") 
      cell.textLabel?.numberOfLines=0 
      cell.textLabel?.sizeToFit() 

      cell.textLabel?.lineBreakMode = NSLineBreakMode.byWordWrapping 

      cell.textLabel?.textColor = UIColor.white 

      if (indexPath.row % 2 == 0) 
      { 
       cell.backgroundColor = UIColor(red: 22/255, green: 160/255, blue: 133/255, alpha: 1.0) 
      } 
      else 
      { 
       cell.backgroundColor = UIColor(red: 44/255, green: 62/255, blue: 80/255, alpha: 1.0) 
      } 
     } 
     else 
     { 
      let array = PhoneArray[indexPath.row] 
      //print("search not Active") 

      cell.textLabel?.text = array.replacingOccurrences(of: " ", with: "").replacingOccurrences(of: "[", with: " ").replacingOccurrences(of: "]", with: " ").replacingOccurrences(of: "&", with: "*") 
      cell.textLabel?.numberOfLines=0 
      cell.textLabel?.sizeToFit() 

      cell.textLabel?.lineBreakMode = NSLineBreakMode.byWordWrapping 

      cell.textLabel?.textColor = UIColor.white 

      if (indexPath.row % 2 == 0) 
      { 
       cell.backgroundColor = UIColor(red: 22/255, green: 160/255, blue: 133/255, alpha: 1.0) 
      } 
      else 
      { 
       cell.backgroundColor = UIColor(red: 44/255, green: 62/255, blue: 80/255, alpha: 1.0) 
      } 
     } 

     return cell 
    } 



    func getData(_ link:String) 
    { 
     let url = URL(string: link)! 
     let request = URLRequest(url: url, cachePolicy: .reloadIgnoringCacheData, timeoutInterval: 20) 
     URLSession.shared.dataTask(with: request) { (data, response, error) in 
      if error != nil { 
       print(error!) 
       let alertController = UIAlertController(title: "No Connection", message: 
        "Phone directory connection could not be established", preferredStyle: UIAlertControllerStyle.alert) 
       alertController.addAction(UIAlertAction(title: "Dismiss", style: UIAlertActionStyle.default,handler: nil)) 

       self.present(alertController, animated: true, completion: nil) 

       return 
      } 

      do { 
       if let jsonData = try JSONSerialization.jsonObject(with:data!, options: []) as? [[String:Any]] { 
        //print(jsonData) 
        for item in jsonData { 

         if let phone_first = item["EMP_FIRST_NAME"] as? String 
         { 
          if let phone_last = item["EMP_LAST_NAME"] as? String 
          { 
           if let phone_ext = item["PHONE_EXT"] as? String 
           { 



            self.PhoneArray.append(" [" + phone_first + "]" + " [" + phone_last + "]" + "&" + phone_ext + "&") 
           } 
          } 
         } 

         DispatchQueue.main.async { 
          self.tableView.reloadData() 
         } 
        } 
       } 
      } catch let error as NSError { 
       print(error) 
      } 
      }.resume() 

      //print(self.PhoneArray) 
    } 

} 

這裏是什麼樣子時,我通常加載它沒有搜索

Without Search

這裏是什麼樣子時,我做搜索,如你可以我的桌子視圖不顯示任何東西

With Search

回答

2

的問題就在這裏:

filtered = PhoneArray.filter({$0 == searchBar.text}) 

您應該檢查如果字符串包含搜索文本

filtered = PhoneArray.filter({$0.contains(searchBar.text)}) 
+1

真棒非常感謝你@Jeremy – Snowman08