簡體   English   中英

UISearch 欄直到沒有點擊取消按鈕才顯示結果

[英]UISearch bar not showing result until did not click on cancel button

我正在嘗試實現搜索功能。 這將從用戶那里獲取輸入,並在按下搜索按鈕時返回結果。 我有搜索這個例子

但是這個例子對我沒有用。 我有一個這樣的學生。

override func viewDidLoad() {
    super.viewDidLoad()
    // Setup the Location Search bar Controller
    let locationSearchTable = storyboard!.instantiateViewController(withIdentifier: "SearchViewController") as! SearchViewController
    resultSearchController = UISearchController(searchResultsController: locationSearchTable)
    resultSearchController?.searchResultsUpdater = locationSearchTable

    searchBar = resultSearchController!.searchBar
    searchBar.sizeToFit()
    searchBar.placeholder = "Search"
    searchBar.delegate = self
    navigationItem.titleView = resultSearchController?.searchBar

    resultSearchController?.hidesNavigationBarDuringPresentation = false
    resultSearchController?.dimsBackgroundDuringPresentation = true

    definesPresentationContext = true
}

另一個功能是

extension SearchViewController : UISearchResultsUpdating, UISearchBarDelegate {
func updateSearchResults(for searchController: UISearchController) {
    self.view.isHidden = false
}
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
    self.viewList.removeAll()
    getListOfItem(searchBar.text!)
 }
}

我的getListOfItem從數據庫中獲取數據,在收到數據后,我正在從該函數重新加載我的UITableView

func getListOfItem(_ query : String){
    if !loadingData {
        self.viewList.removeAll()
    }
    let request = NSMutableURLRequest(url: URL(string: MyUrl.API_SERVER_URL)!)
    request.httpMethod = "POST"
    let postString = "tag=search&p=\(query)&page=\(String(pageNo))"
    print("postString=\(postString)")
    DispatchQueue.main.async {
        self.startSpinner()
    }
    request.httpBody = postString.data(using: String.Encoding.utf8)
    let task = URLSession.shared.dataTask(with: request as URLRequest) {
        data, response, error in
        if(error != nil){
            self.loadingData = false
            DispatchQueue.main.async {
                self.stopSpinner()
            }
            let nsError = error! as NSError
            let dialog = UIAlertController(title: "Internal Server Error?", message: nsError.localizedDescription, preferredStyle: UIAlertControllerStyle.alert)
            dialog.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil))

            DispatchQueue.main.async(execute: {
                self.present(dialog, animated: true, completion: nil)
            })

        } else{
            self.loadingData = false
            do {
                var success : Int = 0
                let jsonObj = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as! [String : AnyObject]
                success = jsonObj["success"]! as! Int
                if success == 1 {
                    let json = jsonObj["data"]as? NSArray
                    self.pageNo = self.pageNo + 1
                    DispatchQueue.main.async {
                        for i in 0 ..< json!.count {
                            let productObj  = json![i]as? [String: AnyObject]
                            let newModel = Search()
                            newModel.attributeId =  productObj!["AttributeID"] as? String
                            newModel.attributePrice = productObj!["AttributePrice"] as? String
                            newModel.imageURL = productObj!["ImageURL"] as? String
                            newModel.inventoryCurrent = productObj!["InventoryCurrent"] as? String
                            newModel.pageText = productObj!["PageText"] as? String
                            newModel.productDescription = productObj!["ProductDescription"] as? String
                            newModel.pageURL = productObj!["PageURL"] as? String
                            newModel.productID = productObj!["ProductID"] as? String
                            newModel.productName = productObj!["ProductName"] as? String
                            newModel.thumbURL = productObj!["ThumbURL"] as? String
                            newModel.internationalShipping = productObj!["internationalShipping"] as? String
                            newModel.maxQty = productObj!["maxQty"] as? String
                            newModel.productDisplay = productObj!["productDisplay"] as? String
                            self.viewList.append(newModel)

                        }

                    }
                }
                DispatchQueue.main.async {
                    print("reload")
                    self.checkItems()
                    self.viewListTable.reloadData()
                    //self.view.layoutIfNeeded()
                }
            } catch {
            }
            DispatchQueue.main.async(execute: {
                self.stopSpinner()
            })
        }
    }
    task.resume();
}

此函數從數據庫中獲取數據並重新加載myTableView 在我點擊UISearchBar cancel按鈕之前,結果不會顯示。 請幫助我,謝謝。

更新我剛剛在searchBarSearchButtonClicked()添加了一些代碼后解決了這個問題,我已經添加了self.resultSearchController?.view.isHidden = true這一行,但在這里我無法直接滾動我的表格。 意味着我可以在點擊后滾動我的表格

在我的searchBarSearchButtonClicked添加一些代碼行之后。 我的問題正在得到解決。

func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
    self.viewList.removeAll()
    self.searchBar.resignFirstResponder()//This Line Remove the keyboard
    self.resultSearchController?.view.isHidden = true // This line Hide current View
    self.viewListTable.reloadData()
    pageNo = 1
    self.searchStr = searchBar.text! // This Line taking a search string into global variable for future use.
    self.resultSearchController?.isActive = false // This Line for inActivate searchView.
    getListOfItem()
}

在使用之前Make Sure在該函數中寫入的所有行的層次結構。

func updateSearchResults(for searchController: UISearchController) {
    self.view.isHidden = false
    getListOfItem(searchBar.text!)
}

我想你錯過了在func updateSearchResults(for searchController: UISearchController)添加這個getListOfItem(searchBar.text!) func updateSearchResults(for searchController: UISearchController)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM