[英]Search results not showing right data in DetailViewController (Swift 3)
I have 3 objects being sent to the DetailViewController (Title, Date, Body) through the default Segue func in Swift. 我有3个对象通过Swift中的默认Segue函数被发送到DetailViewController(标题,日期,正文)。 I am only searching the Title data though.
我只是在搜索标题数据。 That part works perfectly but when tapping on the cell in the SearchController, it brings me to the wrong view.
该部分可以正常工作,但是当点击SearchController中的单元格时,它将带我到错误的视图。 (Title is right in the view but the date and body don't match).
(标题在视图中正确,但日期和正文不匹配)。
Segue func: Segue功能:
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 func: 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
}
updateSearchResults func: updateSearchResults函数:
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()
}
Any help would be greatly appreciated! 任何帮助将不胜感激!
EDIT: 编辑:
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)]
}
}
}
Try this: 尝试这个:
struct myObject {
var title: String
var body: String
var date: Date
var altDate: Date
}
then have two arrays for your table data and filtered table data 然后有两个数组用于表数据和过滤后的表数据
var tableData = [myObject]()
var filteredData = [myObject]()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.