Я строю приложение в быстром запросе, чтобы иметь возможность искать города, и я хотел бы, чтобы поиск работал с автозаполнением. Я хочу сделать что-то вроде, если пользователь вводит какой-либо символ или слово в поле поиска, он извлекает результат из базы данных mysql, которая начинается с этого символа или слова, и показывает результат в автоматическом предложении или автоматически завершается. мой бэкэнд-сервис готов. Единственная проблема - я не знаю, как я могу реализовать эту функцию. В данный момент, что мой код делает, когда пользователь вводит что-то в строке поиска, он нажимает кнопку поиска на клавиатуре, а затем приходит результат. надеюсь, вы поймете, что я говорю. Вот мой текущий кодРезультаты поиска с автозавершением
class ViewController: UIViewController, UITableViewDataSource, UISearchBarDelegate {
@IBOutlet weak var mySearchBar: UISearchBar!
@IBOutlet weak var myTableView: UITableView!
var dict = NSDictionary()
var searchResults = [String]()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
return searchResults.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
let myCell = tableView.dequeueReusableCellWithIdentifier("myCell", forIndexPath: indexPath)
myCell.textLabel?.text = searchResults[indexPath.row]
return myCell
}
func searchBarSearchButtonClicked(searchBar: UISearchBar)
{
if(searchBar.text!.isEmpty)
{
return
}
doSearch(searchBar.text!)
}
func doSearch(searchWord: String)
{
mySearchBar.resignFirstResponder()
let myUrl = NSURL(string: "http://localhost/myproject")
let request = NSMutableURLRequest(URL:myUrl!);
let params = ["city" : searchWord]
do {
let data = try NSJSONSerialization.dataWithJSONObject(params, options: .PrettyPrinted)
request.HTTPBody = data
} catch {
//handle error. Probably return or mark function as throws
print("error is \(error)")
//return
}
request.HTTPMethod = "POST";
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")
let task = NSURLSession.sharedSession().dataTaskWithRequest(request, completionHandler: { (data, response: NSURLResponse?, error:NSError?) -> Void in
dispatch_async(dispatch_get_main_queue()) {
if error != nil
{
// display an alert message
self.displayAlertMessage(error!.localizedDescription)
return
}
let json: NSDictionary?
do {
json = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as? NSDictionary
self.searchResults.removeAll(keepCapacity: false)
self.myTableView.reloadData()
if let parseJSON = json {
print(parseJSON)
// var index = 0
self.dict = parseJSON
print("count is \(self.dict.count)")
for var i = 0; i < self.dict.count - 1; i++ {
let cityname = (((self.dict["\(i)"] as?NSDictionary)!["City"] as?NSDictionary)!["name"] as?NSString)! as String
self.searchResults.append(cityname)
}
self.myTableView.reloadData()
}
} catch {
print(error);
}
}
})
task.resume()
}
func displayAlertMessage(userMessage: String)
{
let myAlert = UIAlertController(title: "Alert", message: userMessage, preferredStyle: UIAlertControllerStyle.Alert);
let okAction = UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default, handler: nil)
myAlert.addAction(okAction);
self.presentViewController(myAlert, animated: true, completion: nil)
}
@IBAction func cancelButtonTapped(sender: AnyObject) {
mySearchBar.text = ""
mySearchBar.resignFirstResponder()
}
}
Я действительно не имеют ответа, но вы смотрели на этот учебник от Ray Wenderlich: http://www.raywenderlich.com/113772/uisearchcontroller-tutorial. Там они используют протокол UISearchResultsUpdating, который имеет этот метод: 'updateSearchResultsForSearchController:' который, как говорится в документации, - это: «Вызывается, когда панель поиска становится первым ответчиком или когда пользователь вносит изменения внутри панели поиска. " Может быть, это поможет вам – pbodsk
@pbodsk Хорошо, я проверю – hellosheikh