在多节表视图中使用文本字段搜索-Swift

在多节表视图中使用文本字段搜索-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

我用下面的方法用textfield进行了搜索,当我在表视图中使用单节时,它工作得很好

但当我在表视图中有多个部分时,我不知道如何实现这一点

在正常的单节表视图中

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它是元组数组。检查这个