Я знаю, что раньше были такие вопросы: здесь или здесь
Но это не так подробно, как хотелось бы тем не мение. У меня есть эта страница типа «Изучить» на экране. Он имеет панель поиска в верхней части, и я хотел бы показать содержание / сообщения в средней части. Но когда пользователь нажимает на панель поиска, я хочу, чтобы go на контроллере табличного представления, заменяя содержимое на экране, отображало результаты поиска.

У меня был встроенный контроллер контейнера viewview в контейнере UIView:
import UIKit
import Firebase
class SearchTableViewController: UITableViewController, UISearchResultsUpdating {
let searchController = UISearchController(searchResultsController: nil)
@IBOutlet var searchResultsTableView: UITableView!
var usersArray = [NSDictionary?]()
var filteredIsers = [NSDictionary?]()
var ref = Database.database().reference()
override func viewDidLoad() {
super.viewDidLoad()
searchController.searchResultsUpdater = self
definesPresentationContext = true
tableView.tableHeaderView = searchController.searchBar
ref.child("users").child("public").queryOrdered(byChild: "username").observe(.childAdded, with: { (snapshot) in
if let user = snapshot.value as? [String:Any]{
let username = user["username"] as? String ?? ""
if(username == SpalshScreenViewController.UserData.username){
return
}else{
self.usersArray.append(snapshot.value as? NSDictionary)
}
}else{
return
}
print(self.usersArray)
// insert rows
self.searchResultsTableView.insertRows(at: [IndexPath(row: self.usersArray.count-1, section: 0)], with: UITableView.RowAnimation.automatic )
})
// 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
}
// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
if searchController.isActive && searchController.searchBar.text != "" {
return filteredIsers.count
}else{
return self.usersArray.count
}
}
func updateSearchResults(for searchController: UISearchController) {
filterContent(searchText: self.searchController.searchBar.text!)
}
func filterContent(searchText: String){
self.filteredIsers = self.usersArray.filter{ user in
let username = user!["username"] as? String
return(username?.lowercased().contains(searchText.lowercased()))!
}
tableView.reloadData()
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
let user : NSDictionary?
if searchController.isActive && searchController.searchBar.text != "" {
user = filteredIsers[indexPath.row]
}else{
user = self.usersArray[indexPath.row]
}
cell.textLabel?.text = user?["firstName"] as? String
cell.detailTextLabel?.text = user?["username"] as? String
let profilePicUrl = user?["profilePicURL"] as? String
let encodedurl = URL(string: profilePicUrl!)
print(profilePicUrl)
cell.imageView!.kf.setImage(with: encodedurl, placeholder: UIImage(named: "profile_pic"))
return cell
}
}
Должен ли я иметь этот код в отдельном UITableViewController и затем отображать это представление при нажатии на строку поиска или?
Я знаю, что вы изменили бы let searchController = UISearchController(searchResultsController: nil)
на что-то вроде let searchController = UISearchController(searchResultsController: tableViewController)
, но я не знаю, как все это сделать ie. В моем searchViewController
у меня есть ссылка на UISearchBar, Я думал, что добавлю жест касания и present
в представлении tablecontroller при его нажатии, но это будет означать несоответствие в анимации и стиле панели поиска?
EDIT:
Итак, в основном, у меня есть контроллер представления, в этом контроллере представления вверху есть панель поиска (в данный момент ничего не делающая), а под этой панелью поиска будет представление коллекции, заполненное различными сообщениями. Когда пользователь нажимает на панель поиска, я хотел бы заменить это представление коллекции на представление таблицы с результатами результата поиска. Как бы я этого достиг?