在多节表视图中使用文本字段进行搜索 - Swift
Posted
技术标签:
【中文标题】在多节表视图中使用文本字段进行搜索 - Swift【英文标题】:Search using TextFiled in Multi Sectioned TableView - Swift 【发布时间】:2017-06-07 11:47:21 【问题描述】:我使用以下方法对文本字段进行了搜索,当我在表格视图中使用单个部分时,它工作正常。
但是当我在表格视图中有多个部分时,我不知道如何实现这一点
在普通单节表格视图中
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])
我在 TextField-shouldChangeCharactersIn range 中调用下面的方法
func searchAutocompleteEntriesWithSubstring(substring: String)
areaArr.removeAll()
var mArr = [String]()
for curString in searchAreaArr
let myString:NSString! = curString as! NSString
if (myString).lowercased.contains(substring)
mArr.append(curString as! String)
areaArr.insert(mArr, at: 0)
它在 areaArr 的 第 0 个数组索引 中插入过滤后的字符串。但我需要它应该在他们的部分和部分名称应该是他们自己的,并更改字符串过滤部分的部分索引
比如说如果搜索文字是road,应该是
R.S puram (Section 1)
- Lawly Road
- D.B Road
Town Hall (Section 2)
- Five corner road
我的表格视图方法
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])"
我失去了一整天,请帮助解决这个问题......。欢迎您提出建议
【问题讨论】:
添加正确的json数据,以便我们更好地指导您..,您的格式目前还不清楚.. @Er.Khatri 我在做 UI 所以我在做静态内容,你也可以建议保存和检索 areaArr 的值...... 首先我建议将您的数据存储在一个 touple 数组中,以使您的进一步工作更容易,例如: var items = [(section: String, elements: [String])]()跨度> 【参考方案1】:你可以在 shouldChangeCharactersIn 方法中做这样的事情
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
return searchResult.count
在numberOfRowsInScetion
return searchResult[section].1.count
在titleForHeaderInSection方法中可以使用
return searchResult[section].0
在 cellForRowAt 方法中
cell.textLabel?.text = "\(searchResult[indexPath.section].1[indexPath.row])"
【讨论】:
感谢您的回复。我遇到致命错误:areaTitleResult 行中的索引超出范围 @AbiramiBala 确保 areaTitles 的计数和 areaArr 的计数相同。 是的,两个计数相同 什么是allDetails - NSMutableDictionary() ...? @AbiramiBala 它是元组数组。检查这个link以上是关于在多节表视图中使用文本字段进行搜索 - Swift的主要内容,如果未能解决你的问题,请参考以下文章