我有 3 个对象通过 Swift 中的默认 Segue 函数发送到 DetailViewController(标题、日期、正文)。我只是搜索标题数据。该部分工作完美,但是当点击 SearchController 中的单元格时,它给我带来了错误的 View 。 (标题在 View 中正确,但日期和正文不匹配)。
转接功能:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showDetail" {
if let indexPath = self.tableView.indexPathForSelectedRow {
var object = tableTitle[indexPath.row] as String
var objectTwo = detailDate[indexPath.row] as String
var objectThree = tableBody[indexPath.row] as String
let controller = (segue.destination as! UINavigationController).topViewController as! DetailViewController
if resultSearchController.isActive {
object = filteredTableData[indexPath.row]
} else {
object = tableTitle[indexPath.row]
objectTwo = detailDate[indexPath.row]
objectThree = tableBody[indexPath.row]
}
controller.detailItem = object
controller.detailItemTwo = objectTwo
controller.detailItemThree = objectThree
controller.navigationItem.leftBarButtonItem = self.splitViewController?.displayModeButtonItem
controller.navigationItem.leftItemsSupplementBackButton = true
}
}
}
cellForRowAt 函数:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! CustomTableViewCell
let imageView = UIImage(named: "dIndicator")
cell.accessoryView = UIImageView(image: imageView)
let object = tableTitle[indexPath.row]
let objectTwo = tableBody[indexPath.row]
let objectThree = tableDate[indexPath.row]
if self.resultSearchController.isActive {
cell.titleLabel!.text = filteredTableData[indexPath.row]
cell.detailLabel!.text = ""
cell.dateLabel!.text = ""
} else {
cell.titleLabel!.text = object
cell.detailLabel!.text = objectTwo
cell.dateLabel!.text = objectThree
}
return cell
}
更新搜索结果函数:
func updateSearchResults(for searchController: UISearchController) {
filteredTableData.removeAll(keepingCapacity: false)
let searchPredicate = NSPredicate(format: "SELF CONTAINS[c] %@", searchController.searchBar.text!)
let array = (tableTitle as NSArray).filtered(using: searchPredicate)
filteredTableData = array as! [String]
self.tableView.reloadData()
}
任何帮助将不胜感激!
编辑:
struct objectsToPass {
var annTitle = [String]()
var annBody = [String]()
var annDate = [Date]()
var annDateALT = [Date]()
var tableData : [([String], [String], [Date], [Date])] {
get {
return [(annTitle, annBody, annDate, annDateALT)]
}
}
}
最佳答案
试试这个:
struct myObject {
var title: String
var body: String
var date: Date
var altDate: Date
}
然后有两个数组用于表数据和过滤后的表数据
var tableData = [myObject]()
var filteredData = [myObject]()
关于ios - 搜索结果在 DetailViewController (Swift 3) 中未显示正确的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40352286/