簡體   English   中英

在Swift 3中更改UITextField中的文本時調用Web服務

[英]Calling web service when change the text in UITextField in Swift 3

我正在做這樣的事情。

  1. 在我的viewdidAppear()我正在調用Web服務並獲取數據。

     override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(true) if(dm.shouldRefresh) { com.showProgress() self.getStaffData() { (status) in self.com.removeProgress() if(status) { if(self.arrayDirectory != nil && self.arrayDirectory.count>0) { print("-----Directory data loaded----") self.arrayPreviouslyLoadedArray=self.arrayDirectory if(self.isfirstTime) { self.setupFaces() self.isfirstTime=false } else { self.facesCarousel.reloadData() } } else { self.addEmptyLabel() } } else { self.com.showAlertMessage() self.addEmptyLabel() } } self.dm.shouldRefresh=false } } 
  2. 加載表后,我想對此執行搜索功能。 為了搜索,我使用了UITextField

     func searchTextFieldEditingChanged() { if(txtSearch.text != "") { self.searchText=txtSearch.text //NSObject.cancelPreviousPerformRequests(withTarget: self, selector: #selector(search), object: nil) self.search() } else { self.arrayDirectory=self.arrayPreviouslyLoadedArray facesCarousel.reloadData() } } 

到目前為止,這個工作正常。 但是問題出在無法在當前數組中找到匹配的字符串時。 最初,我從該服務加載20條記錄。 我正在搜索名稱“ David”。 但是這個名字不包含在我的前20條記錄中。 在我的下20條記錄中可用。 但是我的服務沒有搜索工具。 但是,如何以常規方式執行此搜索功能? 基本上我想要的是

  1. 首次加載20條記錄
  2. 重新加載我的桌子
  3. 在文本字段中輸入搜索查詢
  4. 檢查該文本在我的前20條記錄中是否可用
  5. 如果有的話,重新加載我的桌子
  6. 如果不可用,請記錄下20條記錄
  7. 執行搜索
  8. 如果不可用,請從服務中獲取下20個並執行搜索

這就是我想做的。 我已經完成了第四點。 這意味着我可以從前20條記錄中搜索一個單詞。 我試圖設置一個標志並運行服務調用,直到實現為止。

func search()
{
    self.isSearching=true
    self.isfound=false
    //let exists = NSPredicate(format: "DisplayName2 CONTAINS[cd] \(searchText!)")
    let arrayTofilter:[[String:Any]]=self.arrayDirectory as! [[String : Any]]
    let aList = arrayTofilter.filter {
        ( $0 ["DisplayName2"] as! String).range(of: searchText!, options: [.diacriticInsensitive, .caseInsensitive]) != nil
    }

    if(aList.count>0)
    {
        arrayDirectory=aList
        facesCarousel.reloadData()
        isfound=true
    }
    else
    {
        repeat
        {
            self.loadAgain()
        }

        while isfound==false
    }
}

但是,這不符合我的預期。 請給我建議一個更好的解決方案。 謝謝!

您不需要標志。 為了實現您的目標,所有您需要的是在找不到數據時一次又一次調用搜索功能。 所以這是偽代碼

func search() {
    array.findYourObject

    if found {
        tableView.reloadData()
    } else {
        self.getStaffData() { (status) in
            array += newlyFetched20Results
            search()// You probably want to add some condition here to stop it from searching forever
        }
    }

}

暫無
暫無

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

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