2016-10-12 4 views
1

탐색 모음에 검색 막대가 있고 사용자가 입력을 시작하면 몇 가지 제안 사항을 표시하지만 추가적으로 uitableview는 검색 결과와 달라야합니다. 예 : 사용자가 'wh'를 입력하기 시작하면 흰색, wheater, who ... 등의 목록을 표시합니다. 그리고 나서 press 버튼을 누르면 다른 목록이 결과와 함께 표시됩니다.다른 uitableview를 사용하여 제안을 표시하는 검색 막대를 얻는 방법

다른 필드를 가진 다른 셀이기 때문에이 경우 합병증은 uitableviewcell을 사용합니다.

답변

1

나는 똑같은 것을 찾고있는 동안 당신의 질문을 보았습니다. 지금 나는 다른 제안에 구글 제안과 자동 완성을 보여주는 방법을 배웠다. 나는 당신이 이미 그것을 성취했다고 확신하지만 어쨌든 다른 누군가가 그것을 필요로 할 때를 대비해 대답 할 것입니다. 검색 창에 텍스트 필드 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) 

대리자 메서드를 구현하는 것을 잊지 마십시오.

누군가 도움이되기를 바랍니다.

건배.