Прежде всего, извините за длинные коды, приведенные ниже.Это потому, что я не могу выяснить, что мне не хватает или неправильно
Я хочу отображать массивы в табличном представлении в соответствии с нажатой кнопкой ... и когда пользовательский поиск ... должен фильтровать табличное представление ... Все работает нормально, когда я даю статическое трехзначное значение в количестве строк. В противном случае табличное представление просто пустое.
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()
}
}
// просмотр таблицы и функция поиска
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
}
}