Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.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 无法根据所选阵列更新行数计数?_Ios_Swift_Uitableview - Fatal编程技术网

Ios 无法根据所选阵列更新行数计数?

Ios 无法根据所选阵列更新行数计数?,ios,swift,uitableview,Ios,Swift,Uitableview,首先,很抱歉下面给出的代码太长。 这是因为我无法找出我遗漏了什么或错了什么 我想根据单击的按钮在表视图中显示数组..当用户搜索..它应该过滤表视图..当我在行数中给出一个静态的3位数值时,一切正常。否则,表视图就是空白的 class RegisterViewController: UIViewController { @IBOutlet var txtUser: UITextField! @IBOutlet var txtPhone: UITextField! @IBO

首先,很抱歉下面给出的代码太长。 这是因为我无法找出我遗漏了什么或错了什么

我想根据单击的按钮在表视图中显示数组..当用户搜索..它应该过滤表视图..当我在行数中给出一个静态的3位数值时,一切正常。否则,表视图就是空白的

class RegisterViewController: UIViewController {

    @IBOutlet var txtUser: UITextField!
    @IBOutlet var txtPhone: UITextField!
    @IBOutlet var txtEmail: UITextField!
    @IBOutlet var SelectionView: UIView!
    @IBOutlet var pickerTableView: UITableView!
    @IBOutlet var btnDawat: UIButton!
    @IBOutlet var btnCountry: UIButton!
    @IBOutlet var btnNationality: UIButton!

    @IBOutlet var searchItems: UISearchBar!
    let manager = APIManager()

    var isSearching = Bool()

    enum options {
        case dawat
        case country
        case nationality
    }

    var lastSelection:options?

    override func viewDidLoad() {
        super.viewDidLoad()

        isSearching = false

        manager.parsingGet(url: BaseURL.countries) { (JSON, Bool) in


            let dict = JSON.dictionaryObject
            let countries = dict!["data"] as! NSArray
            signUser.countries = countries as! [String]
            let nations = dict!["data"] as! NSArray
            signUser.nationalities  = nations as! [String]               

        }

            pickerTableView.reloadData()

    }


    @IBAction func DawatTitleSelectionAction(_ sender: UIButton) {

        lastSelection = options.dawat
        pickerTableView.reloadData()
        SelectionView.center = self.view.center
        self.view.addSubview(SelectionView)

    }

    @IBAction func CountrySelectionButton(_ sender: UIButton) {

        lastSelection = options.country
        pickerTableView.reloadData()
        SelectionView.center = self.view.center
        self.view.addSubview(SelectionView)

    }

    @IBAction func NationalitySelectionAction(_ sender: UIButton){

        lastSelection = options.nationality
        pickerTableView.reloadData()
        SelectionView.center = self.view.center
        self.view.addSubview(SelectionView)            
    }

    @IBAction func RegisterButtonPressed(_ sender: UIButton) {


    //    Signup.email = self.txtEmail.text!
    //    Signup.phone = self.txtPhone.text!

    }

    @IBAction func pickerSelectButton(_ sender: UIButton) {            

        SelectionView.removeFromSuperview()            

    }        
}
//tableview和搜索功能

    extension RegisterViewController : UITableViewDataSource,UITableViewDelegate  {


    func numberOfSections(in tableView: UITableView) -> Int {

        return 1

    }


    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

          print(signUser.tableData.count)

        return signUser.tableData.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {


        let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! PickerTableViewCell

        if isSearching == false{
           // print("presenting raw data")

            switch lastSelection!{

            case .country:
              //  print("raw countries list")
                signUser.unfilteredArray = signUser.countries
            case .nationality:
               // print("raw nationalities list")
                signUser.unfilteredArray = signUser.nationalities
            case .dawat:
                signUser.unfilteredArray = signUser.dawatTitles

            }

           signUser.tableData = signUser.unfilteredArray

         }

        else {
           // print("presenting filtered data")


            switch lastSelection!{

            case .country:
               // print("filtered countries")
                signUser.countries = signUser.filteredArray
                signUser.tableData = signUser.filteredArray
            case .nationality:
               // print("filtered nationalities")
                 signUser.nationalities = signUser.filteredArray
                signUser.tableData = signUser.filteredArray
            case .dawat:
                 signUser.dawatTitles = signUser.filteredArray
                signUser.tableData = signUser.filteredArray
            }

        }
            cell.lblTitle.text = signUser.tableData[indexPath.row]
            return cell            
    }


extension RegisterViewController : UISearchBarDelegate {


    //searchbar

    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {

        signUser.filteredArray.removeAll(keepingCapacity: false)

        if let searchText = searchItems.text, !searchText.isEmpty {

            isSearching = true

            let searchPredicate = NSPredicate(format: "SELF CONTAINS[c] %@", searchText)

            signUser.filteredArray = (signUser.unfilteredArray as NSArray).filtered(using: searchPredicate) as! [String]


        }

        else {

            signUser.tableData = signUser.unfilteredArray
            isSearching = false

        }            

        pickerTableView.reloadData()            
    }

    func searchBarTextDidEndEditing(_ searchBar: UISearchBar) {

        isSearching = false

    }
}
  • 使用两个数组,例如未过滤数组和过滤数组

    var tableData = [Model]()
    var filteredArray = [Model]()
    
    从不用过滤内容替换
    表格数据

  • 搜索栏中:textDidChange
    lastSelection
    过滤数据,填充
    filteredArray
    并设置
    issearch

  • 在数据源中,方法根据
    is搜索的状态显示数据(简化)


将按钮操作方法更改为signUser.tableData

@IBAction func DawatTitleSelectionAction(_ sender: UIButton) {

    lastSelection = options.dawat
    signUser.filteredArray = signUser.dawatTitles
    signUser.unfilteredArray = signUser.dawatTitles
    signUser.tableData = isSearching ? signUser.filteredArray : signUser.unfilteredArray
    pickerTableView.reloadData()
    SelectionView.center = self.view.center
    self.view.addSubview(SelectionView)

}

@IBAction func CountrySelectionButton(_ sender: UIButton) {

    lastSelection = options.country
    signUser.filteredArray = signUser.countries
    signUser.unfilteredArray = signUser.countries
    signUser.tableData = isSearching ? signUser.filteredArray : signUser.unfilteredArray
    pickerTableView.reloadData()
    SelectionView.center = self.view.center
    self.view.addSubview(SelectionView)

}

@IBAction func NationalitySelectionAction(_ sender: UIButton){

    lastSelection = options.nationality
    signUser.filteredArray = signUser.nationalities
    signUser.unfilteredArray = signUser.nationalities
    signUser.tableData = isSearching ? signUser.filteredArray : signUser.unfilteredArray
    pickerTableView.reloadData()
    SelectionView.center = self.view.center
    self.view.addSubview(SelectionView)
}
更新tableView委托方法

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    print(signUser.tableData.count)
    return signUser.tableData.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! PickerTableViewCell
    cell.lblTitle.text = signUser.tableData[indexPath.row]
    return cell
}
extension RegisterViewController : UISearchBarDelegate {
        func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
            if let searchText = searchItems.text, !searchText.isEmpty {
                isSearching = true
                let searchPredicate = NSPredicate(format: "SELF CONTAINS[c] %@", searchText)
                signUser.filteredArray = (signUser.unfilteredArray as NSArray).filtered(using: searchPredicate) as! [String]
                signUser.tableData = signUser.filteredArray
            }
            else {
                signUser.tableData = signUser.unfilteredArray
                isSearching = false
            }
            pickerTableView.reloadData()
        }
        func searchBarTextDidEndEditing(_ searchBar: UISearchBar) {
            isSearching = false
        }
}
更新搜索栏委托方法

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    print(signUser.tableData.count)
    return signUser.tableData.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! PickerTableViewCell
    cell.lblTitle.text = signUser.tableData[indexPath.row]
    return cell
}
extension RegisterViewController : UISearchBarDelegate {
        func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
            if let searchText = searchItems.text, !searchText.isEmpty {
                isSearching = true
                let searchPredicate = NSPredicate(format: "SELF CONTAINS[c] %@", searchText)
                signUser.filteredArray = (signUser.unfilteredArray as NSArray).filtered(using: searchPredicate) as! [String]
                signUser.tableData = signUser.filteredArray
            }
            else {
                signUser.tableData = signUser.unfilteredArray
                isSearching = false
            }
            pickerTableView.reloadData()
        }
        func searchBarTextDidEndEditing(_ searchBar: UISearchBar) {
            isSearching = false
        }
}

我不明白你在numberofRows中写了什么..我不认为有这样的代码语法。有一种类似的代码语法,叫做请再次检查我的代码..你的代码破坏了我在过滤数组中的代码逻辑,我使用了完全不同的方法enums@JaseelCalicut您的代码逻辑不正确。这就是我改变它的原因。您不需要保留对上次选择的引用,也不需要更改cellForRowAt中的signUser.tableDatamethod@JaseelCalicut检查我的answer@JaseelCalicutcell.lblTitle.text=signUser.tableData[indexPath.row]