Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何作为searchController的结果从不同数组加载两个值?_Swift_Uisearchcontroller - Fatal编程技术网

Swift 如何作为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"] 这两个数组在重新加载

我必须创建填充searchController值的数组

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源代码。