0

私は検索バーの入力に基づいて可能なアドレスを一覧表示するためにtableViewを使用することに興味があります。希望のアドレスを含むセルを選択した後、検索バーのテキストはアドレスで構成されますが、可能なアドレス(セル)が消えるようにします。 didSelectRowAtのself.searchResultsTableView.reloadData()はすべてのセルをクリアするか、別のコマンドがありますか?私は反復せずに適切なアドレスを選択し、提案​​がより多くの細胞を導入した後に細胞をクリアする方法を特定していない。Swift 3.0検索バーのオートコンプリートアドレス

import UIKit 
import MapKit 

class SearchViewController: UIViewController { 

@IBOutlet weak var searchBar: UISearchBar! 
    var searchCompleter = MKLocalSearchCompleter() 
    var searchResults = [MKLocalSearchCompletion]() 
    var searchSource: [String]? 



@IBOutlet weak var searchResultsTableView: UITableView! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    searchCompleter.delegate = self 
    searchBar.delegate = self 
} 

} 


extension SearchViewController: UISearchBarDelegate { 

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) { 

    searchCompleter.queryFragment = searchText 
} 
} 

extension SearchViewController: MKLocalSearchCompleterDelegate { 

func completerDidUpdateResults(_ completer: MKLocalSearchCompleter) { 
    searchResults = completer.results 
    searchResultsTableView.reloadData() 
} 

func completer(_ completer: MKLocalSearchCompleter, didFailWithError error: Error) { 
    // handle error 
} 
} 

extension SearchViewController: UITableViewDataSource { 

func numberOfSections(in tableView: UITableView) -> Int { 
    return 1 
} 

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return searchResults.count 
} 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let searchResult = searchResults[indexPath.row] 
    let cell = UITableViewCell(style: .subtitle, reuseIdentifier: nil) 
    cell.textLabel?.text = searchResult.title 
    cell.detailTextLabel?.text = searchResult.subtitle 

    return cell 
} 
} 

extension SearchViewController: UITableViewDelegate { 

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    tableView.deselectRow(at: indexPath, animated: true) 

    let completion = searchResults[indexPath.row] 

    let searchRequest = MKLocalSearchRequest(completion: completion) 
    let search = MKLocalSearch(request: searchRequest) 
    search.start { (response, error) in 
     let coordinate = response?.mapItems[0].placemark.coordinate 
     print(String(describing: coordinate)) 
     print(response?.mapItems) 
     self.searchBar.text = response?.mapItems[0].name 
    } 


    self.searchResultsTableView.reloadData() 


} 
} 
+0

オンにした場合、検索バーで選択した値を設定して、テーブルビューを非表示にすることができます –

答えて

1

テーブルビューを消去する場合は、データソース配列を空にしてからtableViewをリロードする必要があります。

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    tableView.deselectRow(at: indexPath, animated: true) 

    let completion = searchResults[indexPath.row] 

    let searchRequest = MKLocalSearchRequest(completion: completion) 
    let search = MKLocalSearch(request: searchRequest) 
    search.start { (response, error) in 
     let coordinate = response?.mapItems[0].placemark.coordinate 
     print(String(describing: coordinate)) 
     print(response?.mapItems) 
     self.searchBar.text = response?.mapItems[0].name 
    } 

    //Make empty your array ant then reload tableView 
    searchResults = [] 
    self.searchResultsTableView.reloadData() 
}