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