Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UISearchController Segue_Ios_Swift_Uitableview_Firebase_Uisearchcontroller - Fatal编程技术网

Ios UISearchController Segue

Ios UISearchController Segue,ios,swift,uitableview,firebase,uisearchcontroller,Ios,Swift,Uitableview,Firebase,Uisearchcontroller,我有一个tableview,在tableview控制器中有5个单元格。我希望所有单元格都转到searchtableviewcontroller。但是,每个单元格都是不同的主题,当我单击一个单元格时,我希望该单元格与相应的主题分离。这是searchtableviewcontroller import UIKit import Firebase import FirebaseDatabase class SearchTableViewController: UITableViewControlle

我有一个tableview,在tableview控制器中有5个单元格。我希望所有单元格都转到searchtableviewcontroller。但是,每个单元格都是不同的主题,当我单击一个单元格时,我希望该单元格与相应的主题分离。这是searchtableviewcontroller

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!)

    }

}
这是我的tableviewcontroller,其中包含要选择的单元格

 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
        {

        }
        }

实际上,您应该使用DidSelectRowatingIndexPath委托的方法,并使用segue标识符调用PerformsgueWithIdentifier到SearchViewController

self.performSegueWithIdentifier(YOUR_SEGUE_ID, sender: self)
在这种方法中,您可能希望记住所选对象的索引,因此我建议您创建一种全局变量来存储所选索引

selectedIndex = indexPath.row
然后在prepareForSegue方法中,您可以访问DestinationViewController属性。您应该明确指定适当的视图控制器

var destinationVC = segue.destinationViewController as! YOUR_VIEW_CONTROLLER_CLASS
在这些琐碎的操作之后,您可以自由访问SearchViewController类的所有公共变量和属性。因此,您可以将selectedIndex传递到此视图控制器

例如:

destinationVC.selectedIndex = selectedIndex

最后,在SearchViewController中的viewDidLoad中,您可以调用此变量从数组中获取适当的项以显示相应的数据。

实际上,您应该使用didSelectRowAtIndexPath委托的方法,并使用segue identifier向SearchViewController调用PerformsgueWithIdentifier

self.performSegueWithIdentifier(YOUR_SEGUE_ID, sender: self)
在这种方法中,您可能希望记住所选对象的索引,因此我建议您创建一种全局变量来存储所选索引

selectedIndex = indexPath.row
然后在prepareForSegue方法中,您可以访问DestinationViewController属性。您应该明确指定适当的视图控制器

var destinationVC = segue.destinationViewController as! YOUR_VIEW_CONTROLLER_CLASS
在这些琐碎的操作之后,您可以自由访问SearchViewController类的所有公共变量和属性。因此,您可以将selectedIndex传递到此视图控制器

例如:

destinationVC.selectedIndex = selectedIndex

最后,在SearchViewController中的viewDidLoad中,您可以调用此变量从数组中获取适当的项以显示相应的数据。

我更喜欢直接设置从每个单元格原型到目标的分段,并为它们提供不同的标识符,而不是实现
DidSelectRowatineXpath
,但这是个人偏好的问题。@NRitH只是出于遵循设计架构哲学的逻辑区别。我认为,分段的逻辑应该采用单独的方法。但我同意你的观点,这是一件私人的事情。我有一个类似的设置,很抱歉我忘了包括这个。我已经用设置更新了我的问题。我遇到的困难是,我的单元格应该与searchviewcontroller的结果相分离。例如,我的一个细胞上写着“生物学”,当我点击它时,我想转到searchviewcontroller,让它只显示生物学书籍@KirillKorolevI倾向于直接设置从每个单元原型到目标的分段,并为它们提供不同的标识符,而不是实现
didselectrowatinedexpath
,但这是个人偏好的问题。@n这只是出于遵循设计架构理念的逻辑区别的原因。我认为,分段的逻辑应该采用单独的方法。但我同意你的观点,这是一件私人的事情。我有一个类似的设置,很抱歉我忘了包括这个。我已经用设置更新了我的问题。我遇到的困难是,我的单元格应该与searchviewcontroller的结果相分离。例如,我的一个细胞上写着“生物学”,当我点击它时,我想转到searchviewcontroller,让它只显示生物学书籍@基里尔科罗廖夫