我想在导航栏上有一个搜索栏,当用户开始输入时,显示一些建议,但另外 uitableview 必须与搜索结果不同。 例如: 用户开始输入“wh”:然后显示一个包含white、wheater、who、...的列表 然后,当按下搜索按钮时,会显示其他列表和结果。
在这种情况下, uitableviewcell 会变得更加复杂,因为它们是具有不同字段的不同单元。
最佳答案
我在寻找同样的东西时看到了你的问题。现在我已经学会了如何在不同的表格 View 中显示谷歌建议和自动完成。我确信您已经完成了它,但无论如何我都会回答,以防其他人需要它。
首先,当调用searchBar文本字段editingDidBegin方法时,您需要插入tableview以进行如下查看:
func showSuggestionsTableView() {
if suggestionsTableView == nil {
//I get keyboardhight dynamically and 60 is my navigationBar height.
let availHeight = Globals.deviceScreenSize!.size.height - 60 - CGFloat(keyboardHeight)
suggestionsTableView = UITableView(frame: CGRect(x: 0, y: 82, width: Globals.deviceScreenSize!.size.width, height: availHeight), style: .grouped)
suggestionsTableView?.delegate = self
suggestionsTableView?.dataSource = self
self.view.insertSubview(suggestionsTableView!, aboveSubview: webViewContainer)
suggestionsTableView?.isHidden = false
}
当用户完成搜索时,如何从 View 中删除表格 View
func removeSuggestionsTableView() {
suggestionsTableView?.removeFromSuperview()
suggestionsTableView = nil
}
我创建了建议管理器来获取建议和自动完成数据。创建与其他类通信的协议(protocol): 创建管理器类时,不要忘记调用 XMLParserDelegate。您必须解析来自 google 的 XML 数据。
protocol GoogleAutoComplateManagerDelegate {
func didDownloadResults(resultArr: [String]?)
func didFail(String)
}
class GoogleAutoComplateManager : NSObject, XMLParserDelegate {
var delegate : GoogleAutoComplateManagerDelegate?
static let sharedInstance = GoogleAutoComplateManager()
var parser = XMLParser()
var resultArr = [String]()
func getAutoComplateResults(stringToSearch: String) {
if stringToSearch != "" {
resultArr = []
//You can find about this google url parameters online. For now 'hl' is language parameter.
let googleURL = "http://suggestqueries.google.com/complete/search?output=toolbar&hl=tr&ie=utf8&oe=utf8&q="
let searchURL = URL(string: googleURL + stringToSearch.addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed)!)
parser = XMLParser(contentsOf: searchURL!)!
self.parser.delegate = self
let success:Bool = self.parser.parse()
if success {
delegate?.didDownloadResults(resultArr: resultArr)
}
else {
delegate?.didFail("parser error")
}
}
}
func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) {
//This delegate method loops through every suggestion in xml file and parses it
if (elementName == "suggestion") {
let suggestion : String = attributeDict["data"]!
resultArr.append(suggestion)
}
}
func parser(_ parser: XMLParser, parseErrorOccurred parseError: Error) {
//Parser delegate method for error handling while parsing
delegate?.didFail(parseError.localizedDescription)
}
}
现在您可以像这样从任何地方调用您的类(class);
GoogleAutoComplateManager.sharedInstance.delegate = self
GoogleAutoComplateManager.sharedInstance.getAutoComplateResults(stringToSearch: yourSearchString)
不要忘记实现委托(delegate)方法。
希望它对某人有帮助。
干杯。
关于swift - 如何拥有一个显示不同uitableview建议的搜索栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40009046/