나는 똑같은 것을 찾고있는 동안 당신의 질문을 보았습니다. 지금 나는 다른 제안에 구글 제안과 자동 완성을 보여주는 방법을 배웠다. 나는 당신이 이미 그것을 성취했다고 확신하지만 어쨌든 다른 누군가가 그것을 필요로 할 때를 대비해 대답 할 것입니다. 검색 창에 텍스트 필드 editingDidBegin 메소드가 호출받을 때
먼저이 같이 볼 수있는 tableview를 삽입해야합니다
사용자가 전보다 검색
func removeSuggestionsTableView() {
suggestionsTableView?.removeFromSuperview()
suggestionsTableView = nil
}
함께 할 때 내가보기에서의 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
}
제안 관리자를 만들어 제안 및 자동 완성 데이터를 얻습니다. 다른 클래스와 통신하기 위해 프로토콜을 만듭니다. 관리자 클래스를 만드는 것보다 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)
대리자 메서드를 구현하는 것을 잊지 마십시오.
누군가 도움이되기를 바랍니다.
건배.