ios - 搜索结果在 DetailViewController (Swift 3) 中未显示正确的数据

标签 ios swift uitableview master-detail

我有 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/

相关文章:

iphone - 在 iOS 7 上读取 iPhone 的通话记录

ios - UITableView 返回奇怪的大小

ios - 检测 UIKit for Mac (Catalyst) 中的单个修饰符键更改

swift - TableView 在 IB 中设计时显示内容,但在我以编程方式编写时不显示内容,我做错了什么

ios - Intel XDK + 谷歌服务插件 + IOS = 构建失败

ios - 在 UITableView 中水平滚动 - Swift 3, iOS

ios - UITableViewCell 中未知数量的 UILabel

Swift 表达式从 'Any??' 隐式强制转换为 'Any?'

ios - 类型'ViewController'不符合协议(protocol) 'UITableViewDataSource'

iPhone + UITableView + 访问特定行的单元格