Ios 如何在swift中使用textfield对两个数组进行排序并将其添加到第三个数组
我是swift的新手,我面临着一个接一个的搜索问题。我试过这个密码Ios 如何在swift中使用textfield对两个数组进行排序并将其添加到第三个数组,ios,arrays,swift,uitextfield,Ios,Arrays,Swift,Uitextfield,我是swift的新手,我面临着一个接一个的搜索问题。我试过这个密码 let appln_id = "800016" let result = (dict["listAarry"] as? [[String:Any]])?.filter({ ($0["appln_id"] as? String) == appln_id }) 但我想在文本字段中搜索它 func textField(_ textField: UITextField, shouldChangeCharactersIn range:
let appln_id = "800016"
let result = (dict["listAarry"] as? [[String:Any]])?.filter({ ($0["appln_id"] as? String) == appln_id })
但我想在文本字段中搜索它
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool{
if textField == txtSearch{
let certificationId = txtSearch.text //"800016"
let result = (searchdict["listAarry"] as? [[String:Any]])?.filter({ ($0["appln_id"] as? String) == certificationId })
}
return true
}
因此,您当前正在调用文本字段中的
shouldchangeCharacters的委托函数。但是,您要做的是调用:
@objc func textFieldValueChanged(_ textField: UITextField)
以及:
searchTextField.addTarget(self,action:#选择器(textFieldValueChanged),for:.editingChanged)
在valueChanged方法中,您应该进行筛选,但要进行一些小的编辑,然后将其放入tableView的数据源中,然后运行tableView.reloadData()
结果将根据搜索词进行赋值。我太愚蠢了,我只需要使用contains而不是contains==
txtSearch.addTarget(self, action: #selector(AdmissionReportVC.textFieldDidChange(_:)), for: UIControl.Event.editingChanged)
@objc func textFieldDidChange(_ textField: UITextField) {
var certificationId = String()
certificationId = txtSearch.text ?? ""
print(certificationId)
let result = (searchdict["listAarry"] as? [[String:Any]])?.filter({
(($0["appln_id"] as? String)?.contains(certificationId) ?? false)})
print("Result = ",result as Any
SearchAny = result!
tblView.reloadData()
}
因此,目前您有一个包含一系列字典的字典,您只需要与appln_id
和800016
?@800016是的,但一个接一个,就像我在textfield中输入8一样,那么它将显示所有带有8的值,然后与0相同,直到800016。那么您想在列表中查看您的搜索结果吗?假设键入“8”时有6个结果?只需向uicontrol事件的txtSearch文本字段添加一个目标。使用选择器编辑更改的
即可更新您的结果list@Vollan是的,我明白。但是我想一个接一个地过滤我的代码给出的结果只有当它等于时。我怎么能用名称区分大小写进行相同的搜索?@Muju不确定要检查哪个参数,但两个比较都应该是。小写()
是的,这项更改有效吗。但是如果用户点击大写的按钮,它会再次变为超级用例,我们能做些什么来防止吗?@Muju你应该在te dictionary数组中仍然有这个值?如果你没有,那么你必须把它保存在本地某个地方。。。因为在添加上述代码后,无法反转结果数组中的小写()值,所以结果数组中没有任何内容。
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let previousText:NSString = textField.text! as NSString
let updatedText = previousText.replacingCharacters(in: range, with: string)
let result = dict.filter { (dict) -> Bool in
if let app_id = dict["appln_id"] as? String {
return app_id.contains(updatedText)
}
return false
}
return true
}
txtSearch.addTarget(self, action: #selector(AdmissionReportVC.textFieldDidChange(_:)), for: UIControl.Event.editingChanged)
@objc func textFieldDidChange(_ textField: UITextField) {
var certificationId = String()
certificationId = txtSearch.text ?? ""
print(certificationId)
let result = (searchdict["listAarry"] as? [[String:Any]])?.filter({
(($0["appln_id"] as? String)?.contains(certificationId) ?? false)})
print("Result = ",result as Any
SearchAny = result!
tblView.reloadData()
}