программный код
как добавить поиск по данным tableview
struct jsonstruct:Decodable {
var name:String
var Id : Int = 0
let MobileNumber:String
let gender:String
enum CodingKeys: String, CodingKey {
case name = "name"
case Id = "Id"
case gender = "gender"
}
}
class ProfileVC: UIViewController, UITableViewDelegate,
UITableViewDataSource , UISearchBarDelegate{
var isSearch : Bool = false
var arrFilter:[String] = []
@IBOutlet weak var tblView: UITableView!
var arrayData = [AnyObject]()
var arrdata = [jsonstruct]()
var ListArray : [[String : AnyObject]] = [[String : AnyObject]]()
@IBOutlet weak var searchBar: UISearchBar!
let url = "......"
override func viewDidLoad() {
super.viewDidLoad()
postmethod()
tblView.reloadData()
func postmethod(){
let params: [String : String] = ["Id" : "01"]
Alamofire.upload(
multipartFormData: { multipartFormData in
for (key, value) in params
{
multipartFormData.append((value.data(using: .utf8))!,
withName: key)
}
},
to: url,
encodingCompletion: { encodingResult in switch encodingResult {
case .success(let upload, _, _):
upload.responseJSON { response in
print(response.value as Any)
if let result = response.result.value {
if let jsonstruct = result as? NSDictionary {
let ListArray = jsonstruct.value(forKey: "List")
as! NSArray
let name = ListArray.value(forKey: "name") as!
NSArray
let Id = ListArray.value(forKey: "Id") as! NSArray
.......
.......
if let dict = response.result.value as? [String :
AnyObject], let list = dict["List"] as? [[String :
AnyObject]] {
self.arrayData = list as [AnyObject]
DispatchQueue.main.async {
self.tblView.reloadData()
}
}
for mainarr in self.arrdata{
print(mainarr.name,":",mainarr.Id,":",mainarr.gender,":".....)
DispatchQueue.main.async {
self.tblView.reloadData()
}
}
}
}
}
case .failure(_): break
}
}
)
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath
indexPath: NSIndexPath) {
}
func numberOfSections(in tableView: UITableView) -> Int
{
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section:
Int) -> Int {
if(isSearch) {
return self.arrFilter.count
}
return self.arrayData.count;
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath:
IndexPath) -> UITableViewCell
{
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for:
indexPath) as! TableViewCell
var jsonDict = self.arrayData[indexPath.row] as? [String:AnyObject]
cell.lblname.text = jsonDict?["name"] as? String
cell.lblGender.text = jsonDict?["gender"] as? String
cell.lblId.text = jsonDict?["Id"] as? String
return cell
}
func configureCell(cell: UITableViewCell, forRowAtIndexPath:
NSIndexPath) {
if(isSearch){
cell.textLabel?.text = arrFilter[forRowAtIndexPath.row]
} else {
cell.textLabel?.text = arrayData[forRowAtIndexPath.row] as! String;
}
}
//MARK: UISearchbar delegate
func searchBarTextDidBeginEditing(searchBar: UISearchBar) {
isSearch = true;
}
func searchBarTextDidEndEditing(searchBar: UISearchBar) {
searchBar.resignFirstResponder()
isSearch = false;
}
func searchBarCancelButtonClicked(searchBar: UISearchBar) {
searchBar.resignFirstResponder()
isSearch = false;
}
func searchBarSearchButtonClicked(searchBar: UISearchBar) {
searchBar.resignFirstResponder()
isSearch = false;
}
self.tblView.reloadData()
}
}
Данные из API сохраняются и просматриваются в виде таблицы. Но данные в табличном представлении я хочу фильтровать с помощью поиска с именем и идентификатором ....
Как это возможно ???
SearchBar
Объект UISearchBar предоставляет пользовательский интерфейс для поля поиска на панели, но приложение отвечает за выполнение действий при нажатии кнопок. Как минимум, делегат должен выполнить фактический поиск, когда текст вводится в текстовое поле