我試圖做到以下幾點:當用戶打開這個狗品種的應用程序時,出現一個帶有搜索欄的空表。當用戶點擊搜索欄並輸入字母A時,他們將看到與字母A/a匹配的品種。當用戶點擊一隻狗品種時,該品種將被添加到他們之前看到的空表中。下面是我的代碼我需要兩個TableViewControllers嗎?
class TableViewController: UITableViewController, UISearchResultsUpdating {
var dogBreeds = ["Corgi", "Beagle", "Maltese", "Poodle", "Dachshund"]
var filteredDogs = [String]()
var selectedDogs = [String]()
var searchController: UISearchController!
var resultsController = UITableViewController()
override func viewDidLoad() {
super.viewDidLoad()
self.resultsController.tableView.dataSource = self
self.resultsController.tableView.delegate = self
self.searchController = UISearchController(searchResultsController: self.resultsController)
self.tableView.tableHeaderView = self.searchController.searchBar
self.searchController.searchResultsUpdater = self
self.searchController.dimsBackgroundDuringPresentation = false
definesPresentationContext = true
// Uncomment the following line to preserve selection between presentations
// self.clearsSelectionOnViewWillAppear = false
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem()
}
func updateSearchResults(for searchController: UISearchController) {
//filter through the Dogs array
self.filteredDogs = self.dogBreeds.filter { (breedName:String) -> Bool in
if breedName.lowercased().contains(self.searchController.searchBar.text!.lowercased()) {
return true
}
else {
return false
}
}
// update the table view
self.resultsController.tableView.reloadData()
}
// MARK: - Table view data source
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if tableView == self.tableView{
return self.selectedDogs.count
}
else {
return self.filteredDogs.count
}
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell()
if tableView == self.tableView {
if !selectedDogs.isEmpty {
cell.textLabel?.text = self.selectedDogs[indexPath.row]
}
}
else {
cell.textLabel?.text = self.filteredDogs[indexPath.row]
}
return cell
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
selectedDogs.append(self.filteredDogs[indexPath.row])
self.tableView.reloadData()
}
我在那裏我可以點擊一個品種的狗,柯基例如點,它被添加到TableView中,但是當我點擊柯基我得到一個錯誤。我假設這是因爲我爲我的搜索和Tableview填充使用了1個TableView,並且調用TableView didSelectRowAt適用於整個表格,而不僅僅是過濾的搜索。另外,如何在單擊行後轉換回tableview?
你會說這是它是如何正常完成? – LampPost
@LampPost這取決於情況很好,但是當你在多個地方看到相同的'if' /'else'模式時,認爲控制器應該分開是一個很好的理由。 – dasblinkenlight