Swift 如何作为searchController的结果从不同数组加载两个值?
我必须创建填充searchController值的数组Swift 如何作为searchController的结果从不同数组加载两个值?,swift,uisearchcontroller,Swift,Uisearchcontroller,我必须创建填充searchController值的数组 let textLabel = ["Uni", "Uni", "Faber-Castell", "Faber-Castell","Faber-Castell", "Pilot", "Pilot"] let detailTextLabel = ["Pen", "Pencil", "Crayon", "Mechanical Pencil", "Contour Pencil", "Eraser", "Sharpener"] 这两个数组在重新加载
let textLabel = ["Uni", "Uni", "Faber-Castell", "Faber-Castell","Faber-Castell", "Pilot", "Pilot"]
let detailTextLabel = ["Pen", "Pencil", "Crayon", "Mechanical Pencil", "Contour Pencil", "Eraser", "Sharpener"]
这两个数组在重新加载UITableViewController的数据时配对。
像(Uni,Pen),(Uni,Pencil),(Faber Castell,Crayon)
两人一组,第一个是单元格标题,第二个是副标题。我跟着
我的问题是,当我搜索文本时,它只更新标题部分,而不是预期的字幕
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! UITableViewCell
// 3
if (self.resultSearchController.active) {
// it only updates textLabel. But when I add detailTextLabel
// subtitles comes wrong because first array contains one element
// more than twice.
cell.textLabel?.text = filteredTableData[indexPath.row]
return cell
} else {
cell.textLabel?.text = tableData[indexPath.row]
return cell
}
}
func updateSearchResultsForSearchController(searchController: UISearchController) {
filteredTableData.removeAll(keepCapacity: false)
let searchPredicate = NSPredicate(format: "SELF CONTAINS[c] %@", searchController.searchBar.text)
let array = (tableData as NSArray).filteredArrayUsingPredicate(searchPredicate)
filteredTableData = array as! [String]
self.tableView.reloadData()
}
像这样使用单个阵列:
let penList = ["Uni:Pen", "Uni:Pencil", "Faber-Castell:Crayon"]
let result = filteredTableData[indexPath.row] // example: "Uni:Pen"
let clearResult = String(result.characters.map { $0 == ":" ? " " : $0 })
// clearResult like this "Uni Pen"
cell.textLabel?.text = clearResult
您还可以将数据分离
let result = filteredTableData[indexPath.row]
let resultArray = result.componentsSeparatedByString(":")
let firstText = resultArray[0] // title text
let secondText = resultArray[1] // subtitle text
我想你跳过了字幕。这不是一个好的解决办法。您正在人为地生成包含不同值的字符串,这些值以后必须拆分(这很昂贵,而且很复杂)。使用结构/类/元组来保存一对值。但是如果我有太多的值呢?我的意思是大约一千个不能用手工输入的值@EricD@ardakaraca确切地说,这个解决方案并不好,它不仅会迫使您手工组装字符串,而且它非常复杂且效率低下当前如何获取数组中的值?只需执行相同的操作,但将每个值嵌入到一个结构中(使用循环或任何适当的方法),并生成一个结构数组。然后你可以在方便的时候过滤数组。查看苹果的UISearchController源代码。