2017-07-26 78 views
1

我有,我搜索用戶的搜索欄。當我第一次搜索用戶時,它顯示正確的結果。但是,當我移至詳細視圖(對用戶的配置文件)時,點擊任何按鈕,然後移回,值重複三次。移動時不會影響結果,不要點擊任何按鈕並向後移動。以下是我使用的代碼片段:的tableView顯示重複值

override func viewDidLoad() { 
    super.viewDidLoad() 

    searchController.searchBar.delegate = self 
    searchController.dimsBackgroundDuringPresentation = false 
    searchController.searchBar.placeholder = "Search people (by username)" 
    definesPresentationContext = true 
    tableView.tableHeaderView = searchController.searchBar 

    requestManager.delegate = self 
} 

func updateSearchResults(_ sender: RequestManager) { 
    tableView.reloadData() 
} 

func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { 

     requestManager.resetSearch() 
     requestManager.searchUser(validatedText) 
     print("Validated text: \(validatedText)") 
} 

func searchUser(_ searchText: String) { 
     refUsers.observe(.value, with: { (snapshot) in 

      let snapshotDictionary: [String: AnyObject] = snapshot.value as! [String : AnyObject] 

      for (userKey, _) in snapshotDictionary { 

       if let usernameValue = snapshot.childSnapshot(forPath: userKey).childSnapshot(forPath: "username").value as? String 
       { 
        if usernameValue.lowercased().contains(searchText.lowercased()) { 
         let userData = JSON(snapshot.childSnapshot(forPath: userKey).value!) 


         self.searchUsers.append(userData) 
        } 

        if self.delegate != nil { 
         self.delegate?.updateSearchResults(self) 
        } 

       } 
       else { 
        print("Users could not be found.") 
       } 

      } 

     }) { (error) in 
      print(error.localizedDescription) 
     } 

} 

當我從細節視圖移回時,似乎要調用結果三次?這裏沒有任何功能在詳細視圖中。

+1

的問題是不是你的tableview,但你的searchUsers。要調用每次追加和不沖水老結果 – GIJOW

回答

0

看起來像你一樣initiliazed陣列要附加的數據。所以試試這種方式每當你點擊按鈕重新啓動你的數組或檢查數組中的重複條目,並相應地追加數據。無論哪種方法你都可以遵循。

+0

我試圖用'self.searchUsers.removeAll清除數據(keepCapacity:假)'在searchUser()方法的第一件事情,但它似乎不工作。 – waseefakhtar

+0

一旦你刪除了所有顯示的數量? –

0

你可以嘗試婁等。上搜索

//Original array 
var arrRes = [[String:AnyObject]]() 
//Search Array 
var searchArrRes = [[String:AnyObject]]() 
var searching:Bool = false 

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) { 
    searchArrRes = self.arrRes.filter({(($0["branchName"] as! String).localizedCaseInsensitiveContains(searchText))}) 


    if(searchArrRes.count == 0){ 
     searching = false 
    }else{ 
     searching = true 
    } 
    self.tableView.reloadData(); 
} 

就像給條件表視圖方法

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    if(searching == true){ 
     return searchArrRes.count 
    }else{ 
     return arrRes.count 
    } 

} 

設置值到表格單元格狀波紋管

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

    if(searching == true){ 
     cell.tv_branch_name.text = searchArrRes[indexPath.row]["branchName"] as! String 

    }else{ 
     cell.tv_branch_name.text = arrRes[indexPath.row]["branchName"] as! String 
       } 


    return cell; 
} 
1

只需從陣列添加更多之前刪除對象。

self.searchUsers.removeAll() 
self.searchUsers.append(userData) 

因此,只要添加一段代碼,你會好到哪裏去。