在多节表视图中使用文本字段搜索-Swift
我用下面的方法用textfield进行了搜索,当我在表视图中使用单节时,它工作得很好 但当我在表视图中有多个部分时,我不知道如何实现这一点 在正常的单节表视图中在多节表视图中使用文本字段搜索-Swift,swift,uitableview,search,multidimensional-array,Swift,Uitableview,Search,Multidimensional Array,我用下面的方法用textfield进行了搜索,当我在表视图中使用单节时,它工作得很好 但当我在表视图中有多个部分时,我不知道如何实现这一点 在正常的单节表视图中 foodTypeArr = ["Japanesh", "Chinesh", "Lebanesh", "Italian", "Indian"] searchResultArr.addObjects(from: foodTypeArr as! [Any]) func searchAutocompleteEntriesWithSubstri
foodTypeArr = ["Japanesh", "Chinesh", "Lebanesh", "Italian", "Indian"]
searchResultArr.addObjects(from: foodTypeArr as! [Any])
func searchAutocompleteEntriesWithSubstring(substring: String)
{
searchResultArr.removeAllObjects()
for curString in foodTypeArr
{
let myString:NSString! = curString as! NSString
if (myString).lowercased.contains(substring)
{
searchResultArr.add(curString)
}
}
self.tblList.reloadData()
}
var searchAreaArr = NSMutableArray()
var areaArr = [[String]]()
var areaTitles = NSArray()
areaArr = [["Vadvalli", "Mullai Nagar", "P.N.Pudhur"], ["Lawly Road", "Kowly Brown", "D.B Road"], ["Raja Street", "Gandhipark", "Five corner road”, "Main Town Hall”]]
areaTitles = ["Vadavalli", "R.S.Puram", "Town Hall"]
for i in 0..<areaArr.count
{
searchAreaArr.addObjects(from: areaArr[i])
}
在多节表视图中
foodTypeArr = ["Japanesh", "Chinesh", "Lebanesh", "Italian", "Indian"]
searchResultArr.addObjects(from: foodTypeArr as! [Any])
func searchAutocompleteEntriesWithSubstring(substring: String)
{
searchResultArr.removeAllObjects()
for curString in foodTypeArr
{
let myString:NSString! = curString as! NSString
if (myString).lowercased.contains(substring)
{
searchResultArr.add(curString)
}
}
self.tblList.reloadData()
}
var searchAreaArr = NSMutableArray()
var areaArr = [[String]]()
var areaTitles = NSArray()
areaArr = [["Vadvalli", "Mullai Nagar", "P.N.Pudhur"], ["Lawly Road", "Kowly Brown", "D.B Road"], ["Raja Street", "Gandhipark", "Five corner road”, "Main Town Hall”]]
areaTitles = ["Vadavalli", "R.S.Puram", "Town Hall"]
for i in 0..<areaArr.count
{
searchAreaArr.addObjects(from: areaArr[i])
}
这样,它将在区域arr的第0个数组索引中插入过滤后的字符串。但是我需要它应该在它们的节上,节名称应该是它们自己的,并且要更改字符串的过滤节的节索引
例如,如果搜索文本为道路,则应为
R.S puram (Section 1)
- Lawly Road
- D.B Road
Town Hall (Section 2)
- Five corner road
我的tableview方法
func numberOfSections(in tableView: UITableView) -> Int
{
return areaArr.count
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
return areaArr[section].count
}
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String?
{
if section < areaTitles.count
{
return areaTitles[section] as? String
}
return nil
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let cell:UITableViewCell =
self.tblList.dequeueReusableCell(withIdentifier: "cell") as UITableViewCell!
cell.textLabel?.text = "\(areaArr[indexPath.section][indexPath.row])"
}
func numberOfSections(在tableView:UITableView中)->Int
{
返回区域arr.count
}
func tableView(tableView:UITableView,numberofrowsinssection:Int)->Int
{
返回区域arr[段]。计数
}
func tableView(tableView:UITableView,titleForHeaderInSection:Int)->String?
{
如果节UITableViewCell
{
let单元格:UITableViewCell=
self.tblList.dequeueReusableCell(带有标识符:“cell”)作为UITableViewCell!
cell.textlab?.text=“\(arearr[indexPath.section][indexPath.row])”
}
我失去了一整天与它,请帮助解决这个…。欢迎您的建议您可以在shouldChangeCharacters方法中执行类似操作
let areaArr = [["Vadvalli", "Mullai Nagar", "P.N.Pudhur"], ["Lawly Road", "Kowly Brown", "D.B Road"], ["Raja Street", "Gandhipark", "Five corner road", "Main Town Hall"]]
let areaTitles = ["Vadavalli", "R.S.Puram", "Town Hall"]
let searchText = "road"
var areaArrResult = areaArr.map { $0.filter({ $0.lowercased().contains(searchText) }) }
let areaTitlesResult = areaTitles.filter { !areaArrResult[areaTitles.index(of: $0)!].isEmpty }
areaArrResult = areaArrResult.filter { !$0.isEmpty }
print(areaArrResult)//[["Lawly Road", "D.B Road"], ["Five corner road"]]
print(areaTitlesResult)//["R.S.Puram", "Town Hall"]
或
var allDetails:[(String,[String])] = []
var searchResult:[(String,[String])] = []
allDetails = [("Vadavalli",["Vadvalli", "Mullai Nagar", "P.N.Pudhur"]),
("R.S.Puram",["Lawly Road", "Kowly Brown", "D.B Road"]),
("Town Hall",["Raja Street", "Gandhipark", "Five corner road", "Main Town Hall"])]
searchAreaArr = areaArr.map({ ($0.0,$0.1.filter({ $0.lowercased().contains(substring) })) }).filter { !$0.1.isEmpty}
print(searchResult)//[("R.S.Puram", ["Lawly Road", "D.B Road"]), ("Town Hall", ["Five corner road"])]
然后
在numberOfSections
中返回搜索结果。计数
在numberofrowsnsection
中返回搜索结果[section].1.计数
在titleForHeaderInSection方法中,您可以使用
return searchResult[section].0
In-cellForRowAt方法
cell.textlab?.text=“\(searchResult[indexPath.section].1[indexPath.row])”
添加正确的json数据,以便我们更好地指导您……,您的格式目前不清楚……@Er.Khatri正在处理UI,所以我正在处理静态内容,您还可以建议保存和检索areaArr的值……首先,我建议将您的数据存储在一个touple数组中,以简化进一步的工作,例如:var items=[(section:String,elements:[String])(),感谢您的回复。。im收到致命错误:区域标题结果中的索引超出范围line@AbiramiBala确保areaTitles的计数和areaArr的计数相同。是的,两个计数相同allDetails是什么-NSMutableDictionary()…?@AbiramiBala它是元组数组。检查这个