[英]Calling web service when change the text in UITextField in Swift 3
我正在做这样的事情。
在我的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 } }
加载表后,我想对此执行搜索功能。 为了搜索,我使用了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条记录中可用。 但是我的服务没有搜索工具。 但是,如何以常规方式执行此搜索功能? 基本上我想要的是
这就是我想做的。 我已经完成了第四点。 这意味着我可以从前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.