TableView搜索栏问题(Swift - Firebase)

时间:2018-01-26 07:23:14

标签: ios swift uitableview firebase

我真的需要帮助,因为我不确定如何解决这个问题。我正在尝试使我的视图控制器好像当我正在搜索特定的展位名称并从Firebase增加值时,只有我的搜索栏中的Booth名称更新而不是重新加载整个展位并更新它(因此使我的搜索栏无用)。

也许我的截图会让您更好地了解问题。如果你还没有得到它,请随意评论并问我,因为我知道这很复杂。谢谢!

import UIKit
import FirebaseDatabase

var ref: DatabaseReference?
var databaseHandle: DatabaseHandle?
var postData2 = [String]()
var currentpostDataArray = [String]()
var filteredDataArray = [tableData]()
var tableDataArray = [tableData]()

class TableViewController: UITableViewController, UISearchBarDelegate {


    @IBOutlet var searchBar: UISearchBar!

    override func viewDidLoad() {
        super.viewDidLoad()
        setUpSearchBar()

        ref = Database.database().reference() //set the firebase reference

        // Retrieve the post and listen for changes
        databaseHandle = ref?.child("Posts").observe(.value, with: { (snapshot) in

            currentpostDataArray.removeAll()
            postData2.removeAll()
            tableDataArray.removeAll()

            for child in snapshot.children {
                let snap = child as! DataSnapshot
                let key = snap.key
                let value = String(describing: snap.value!)
                let rating = (value as NSString).integerValue
                tableDataArray.append(tableData(boothName: key, boothRating: rating))



            }
            let sortedTableData = tableDataArray.sorted(by: { $0.boothRating > $1.boothRating })
            for data in sortedTableData {
                currentpostDataArray.append(data.boothName)

                let value = String(describing: data.boothRating)
                postData2.append(value)

            }

            self.tableView.reloadData()


        })

    }


    private func setUpSearchBar() {
        searchBar.delegate = self
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows
            return currentpostDataArray.count
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)

        cell.textLabel?.text = currentpostDataArray[indexPath.row]
        cell.detailTextLabel?.text = postData2[indexPath.row] + " ♥"
        cell.detailTextLabel?.textColor = UIColor.red;
        return cell
    }



    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
        currentpostDataArray.removeAll()
        postData2.removeAll()

        if(searchText.isEmpty)
        {
            let sortedTableData = tableDataArray.sorted(by: { $0.boothRating > $1.boothRating })
            for data in sortedTableData {
                currentpostDataArray.append(data.boothName)

                let value = String(describing: data.boothRating)
                postData2.append(value)
            }
        }
        else {
            let allBooth = tableDataArray.filter{$0.boothName.lowercased().contains(searchText.lowercased())}
            let sortedTableData = allBooth.sorted(by: { $0.boothRating > $1.boothRating })

            for data in sortedTableData {
                currentpostDataArray.append(data.boothName)

                let value = String(describing: data.boothRating)
                postData2.append(value)
            }

        }

        tableView.reloadData()
    }

    //Enable "Cancel" button on Search Bar
    func searchBarShouldBeginEditing(_ searchBar: UISearchBar) -> Bool {
        searchBar.showsCancelButton = true
        return true
    }

    func searchBarTextDidEndEditing(_ searchBar: UISearchBar) {
        self.searchBar.endEditing(true)
        searchBar.resignFirstResponder()
    }

    func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
        searchBar.resignFirstResponder()
    }

    func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
    searchBar.text = ""
        currentpostDataArray.removeAll()
        postData2.removeAll()
        let sortedTableData = tableDataArray.sorted(by: { $0.boothRating > $1.boothRating })
        for data in sortedTableData {
            currentpostDataArray.append(data.boothName)

            let value = String(describing: data.boothRating)
            postData2.append(value)

        }
        self.tableView.reloadData()
        self.searchBar.endEditing(true)
        searchBar.showsCancelButton = false
        searchBar.resignFirstResponder()

    }
}

class tableData {
    var boothName: String
    var boothRating: Int
    init(boothName: String, boothRating: Int) {
        self.boothName = boothName
        self.boothRating = boothRating
    }

}

屏幕截图:https://ibb.co/cN1XzG https://ibb.co/it3eeG https://ibb.co/bDMAmw

0 个答案:

没有答案
相关问题