2017-09-22 13 views
0

私はスムーズなアプリケーションに検索バーを実装したいが、これは正常に実行されているが何らかの理由で何も検索せずにテーブルビューに何も表示されないどんな助けでも大歓迎です。ここで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

関連する問題