Ich habe eine Tabellenansicht mit 5 Zellen in einem Tableviewcontroller. Ich möchte, dass alle Zellen zu einem Searchtableviewcontroller übergehen. Jede Zelle ist jedoch ein anderes Thema, und wenn ich auf eine Zelle klicke, möchte ich, dass die Zelle zu ihrem entsprechenden Subjekt übergeht. Dies ist der Suchtabelle-Controller.UISearchController Segue
import UIKit
import Firebase
import FirebaseDatabase
class SearchTableViewController: UITableViewController, UISearchResultsUpdating, UISearchBarDelegate {
@IBOutlet var followUsersTableView: UITableView!
let searchController = UISearchController(searchResultsController: nil)
var usersArray = [NSDictionary?]()
var filteredUsers = [NSDictionary?]()
var databaseRef = FIRDatabase.database().reference()
var infoRef = FIRDatabase.database().reference().child("info")
var loggedInUser = FIRAuth.auth()?.currentUser
let userID = FIRAuth.auth()?.currentUser?.uid
var posts = NSMutableArray()
var loggedUser:FIRUser?
override func viewDidLoad() {
super.viewDidLoad()
searchController.searchResultsUpdater = self
searchController.dimsBackgroundDuringPresentation = false
definesPresentationContext = true
tableView.tableHeaderView = searchController.searchBar
searchController.searchBar.isTranslucent = false
searchController.searchBar.tintColor = UIColor(red:0.23, green:0.73, blue:1.00, alpha:1.0)
searchController.searchBar.searchBarStyle = .minimal
searchController.searchBar.placeholder = "Search Books by Title, Author & ISBN"
searchController.searchBar.delegate = self
searchController.searchBar.sizeToFit()
self.searchController.hidesNavigationBarDuringPresentation = false
self.navigationItem.title = "Search Books"
databaseRef.child("books").observe(.childAdded, with: { (snapshot) in
let key = snapshot.key
let snapshot = snapshot.value as? NSDictionary
snapshot?.setValue(key, forKey: "uid")
if(key == self.loggedUser?.uid)
{
print("same as logged in user")
}
else
{
self.usersArray.append(snapshot)
self.followUsersTableView.insertRows(at: [IndexPath(row:self.usersArray.count-1,section:0)], with: UITableViewRowAnimation.automatic)
}
}) { (error) in
print(error.localizedDescription)
}
}
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 filteredUsers.count
}
return self.usersArray.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = self.tableView.dequeueReusableCell(withIdentifier: "Cells", for: indexPath) as! TableViewCell
let user : NSDictionary?
if searchController.isActive && searchController.searchBar.text != ""{
user = filteredUsers[indexPath.row]
}
else
{
user = self.usersArray[indexPath.row]
}
cell.Title.text = user?["title"] as? String
cell.Author.text = user?["Author"] as? String
cell.ISBN.text = user?["ISBN"] as? String
cell.Price.text = user?["Price"] as? String
if let imageName = user?["image"] as? String {
let imageRef = FIRStorage.storage().reference().child("images/\(imageName)")
imageRef.data(withMaxSize: 25 * 1024 * 1024, completion: { (data, error) -> Void in
if error == nil {
let image = UIImage(data: data!)
cell.Book.image = image
}else {
print("Error downloading image:")
}})}
cell.detailTextLabel?.text = user?["handle"] as? String
return cell
}
func filtereContent(searchText: String)
{
self.filteredUsers = self.usersArray.filter{user in
// let typeMatch = (scope == "Title") || (user?.fileType() == scope)
let title = user!["title"] as? String
let author = user!["Author"] as? String
let isbn = user!["ISBN"] as? String
return(title?.lowercased().contains(searchText.lowercased()))! || (author?.lowercased().contains(searchText.lowercased()))! || (isbn?.lowercased().contains(searchText.lowercased()))!
}
tableView.reloadData()
}
}
extension SearchTableViewController{
func updateSearchResults(for searchController: UISearchController) {
filtereContent(searchText: self.searchController.searchBar.text!)
}
}
Das ist mein Tableviewcontroller, die die Zellen ausgewählt werden muss.
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
myIndex = indexPath.row
if indexPath.section == 0 && indexPath.row == 0{
performSegue(withIdentifier: "segue", sender: self)
}
else if indexPath.section == 0 && indexPath.row == 1{
}
else if indexPath.section == 0 && indexPath.row == 2{
}
else if indexPath.section == 0 && indexPath.row == 3{
}
else
{
}
}
Ich bevorzuge es, die Segmente direkt von jedem Zellprototyp zum Ziel einzurichten und ihnen verschiedene Bezeichner zu geben, anstatt "didSelectRowAtIndexPath" zu implementieren, aber das ist eine Frage der persönlichen Vorliebe. – NRitH
@NRitH Nur aus Gründen der logischen Unterscheidung folgt die Philosophie der Design-Architektur. Ich glaube, dass die Logik der Übergänge in einer getrennten Methode sein sollte. Aber ich stimme dir zu, dass es wirklich eine persönliche Sache ist. –
Ich hatte ein ähnliches Setup, leider habe ich vergessen, das zu integrieren. Ich habe meine Frage mit dem Setup aktualisiert. Wo ich eine harte Zeit habe, ist, dass die Zellen, die ich habe, zu Ergebnissen des searchviewcontrollers übergehen sollten. Zum Beispiel, auf einer meiner Zellen sagt es Biologie und wenn ich darauf klicke, möchte ich zum searchviewcontroller wechseln und es nur Biologiebücher anzeigen lassen. @KirillKorolev – juelizabeth