ナビゲーションバーに検索バーがあり、ユーザーが入力を開始するときにいくつかの提案を表示したいが、uitableviewは検索結果と異なる必要があります。 例: ユーザーは 'wh'を入力し始めます:白、wheater、who、whoのリストを表示します。 そして、検索ボタンを押すと他のリストと結果が表示されます。別のuitableviewで提案を表示する検索バーを持つ方法
この場合、フィールドが異なるセルであるため、複雑さはuitableviewcellになります。
ナビゲーションバーに検索バーがあり、ユーザーが入力を開始するときにいくつかの提案を表示したいが、uitableviewは検索結果と異なる必要があります。 例: ユーザーは 'wh'を入力し始めます:白、wheater、who、whoのリストを表示します。 そして、検索ボタンを押すと他のリストと結果が表示されます。別のuitableviewで提案を表示する検索バーを持つ方法
この場合、フィールドが異なるセルであるため、複雑さはuitableviewcellになります。
私は同じことを探している間にあなたの質問を見ました。今私はどのようにGoogleの提案を表示し、異なるテーブルビューでオートコンプリートを学びました。私はあなたがすでにそれを達成したと確信していますが、誰かがそれを必要とする場合には私はとにかく答えるでしょう。
まずあなたが検索バーのTextField editingDidBeginメソッドが呼び出されるときに、このように表示するテーブルビューを挿入する必要があります。
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
}
ユーザーが私より検索
func removeSuggestionsTableView() {
suggestionsTableView?.removeFromSuperview()
suggestionsTableView = nil
}
で行われたとき、私はビューからテーブルビューを削除する方法作成した提案マネージャーを使用して、提案と自動完成のデータを取得します。他のクラスと通信するためのプロトコルを作成してください: マネージャクラスを作成するよりも、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)
}
}
これで、どこからでもクラスを呼び出すことができます。
GoogleAutoComplateManager.sharedInstance.delegate = self
GoogleAutoComplateManager.sharedInstance.getAutoComplateResults(stringToSearch: yourSearchString)
デリゲートメソッドを実装することを忘れないでください。
誰かを助けることを願っています。
乾杯。