将数据从 TableView 发送到 DetailView Swift,即使它不在 UITableList 上



每当用户在搜索栏中键入名称时,如果该名称在我的JSON上并显示在UITableView中,我就可以单击该名称,字符串将传递给我的其他视图控制器。但是现在,我也想保存并传递搜索到的名称,即使它不在我的 JSON 上。这样,用户可以搜索他们想要的任何"药物"名称,如果该名称不在我的 JSON 列表中,它仍然会被保存并传递给我的其他视图控制器。

这是我的表视图的代码:

import UIKit
import SwiftyJSON
class rxListTableViewController: UITableViewController {
let searchController = UISearchController(searchResultsController: nil)
let rxlist = try! JSON(data: NSData(contentsOfFile: Bundle.main.path(forResource: "rxList01", ofType: "json")!)! as Data)
var filteredRxList = [JSON]()
override func viewDidLoad() {
self.tableView.backgroundColor = UIColor.lightGray
super.viewDidLoad()
searchController.searchResultsUpdater = self
searchController.dimsBackgroundDuringPresentation = false
definesPresentationContext = true
tableView.tableHeaderView = searchController.searchBar
tableView.setContentOffset(CGPoint(x: 0, y: searchController.searchBar.frame.size.height), animated: false)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
navigationItem.hidesSearchBarWhenScrolling = false
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
searchController.isActive = true
navigationItem.hidesSearchBarWhenScrolling = true
}
override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
cell.backgroundColor = UIColor.clear
}
// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if isFiltering(){
return filteredRxList.count
}
return rxlist.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "rxCell", for: indexPath)
var data: JSON
if searchController.isActive && searchController.searchBar.text != "" {
data = filteredRxList[indexPath.row]
let countryName = data["term"].stringValue
cell.textLabel?.text = countryName
}else{
data = rxlist[indexPath.row]
tableView.reloadData()
}
return cell
}
func filteredContentForSearchText(searchText: String){
filteredRxList = rxlist.array!.filter { country in
return country["term"].stringValue.localizedLowercase.contains(searchText.localizedLowercase)
}
tableView.reloadData()
}
func searchBarIsEmpty() -> Bool{
return searchController.searchBar.text?.isEmpty ?? true
}
func isFiltering() -> Bool{
return searchController.isActive && !searchBarIsEmpty()
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "moreinfo"{
if let indexPath = tableView.indexPathForSelectedRow{
let data: JSON
if isFiltering(){
data = filteredRxList[indexPath.row]
}else{
data = rxlist[indexPath.row]
}
let controller = segue.destination as? medDetailsViewController
let final = data["term"].stringValue
controller?.name = final
controller?.navigationItem.leftBarButtonItem = splitViewController?.displayModeButtonItem
controller?.navigationItem.leftItemsSupplementBackButton = true
}
}
} 
}
extension rxListPetsTablViewController: UISearchResultsUpdating{
func updateSearchResults(for searchController: UISearchController) {
filteredContentForSearchText(searchText: searchController.searchBar.text!)
}
}

这是我的视图控制器代码:

import UIKit
class medDetailsViewController: UIViewController {
@IBOutlet weak var lbl: UILabel!
var name = ""
override func viewDidLoad() {
super.viewDidLoad()
lbl.text = "(name) "
}

有没有办法实现该请求?

在下一个视图控制器中,创建一个可选的字符串变量并传递值"searchController.searchBar.text!"。例如,在准备方法中,添加以下代码:

let controller = segue.destination as? medDetailsViewController
controller.searchText = searchController.searchBar.text!

最新更新