在ViewController中:
protocol SearchResultDelegate {
func SendDataToResultController(_ result: [SkelbimasModel])
}
class ViewController: UIViewController, UISearchBarDelegate, CLLocationManagerDelegate, MKMapViewDelegate, AddSkelbimas {
@IBOutlet weak var Label: UILabel!
@IBOutlet weak var SearchBar: UISearchBar!
// @IBOutlet weak var boomFilter: BoomMenuButton!
// @IBOutlet weak var Label: UILabel!
@IBOutlet weak var CategoryView: UIView!
@IBOutlet weak var Map: MKMapView!
@IBOutlet weak var bmb: BoomMenuButton!
var Delegate:SearchResultDelegate?
.........
//ijungimiame lentele su paieskos rezultatais
if(result.count > 1) {
Delegate?.SendDataToResultController(result)
GoToSearchResultVC(result)
}
调用函数GoToSearchResultVC(result)它会打开新的控制器 在新的控制器代码是:
import UIKit
class SearchResultTableViewController: UITableViewController, SearchResultDelegate {
.....
func SendDataToResultController(_ result: [SkelbimasModel]) {
print("result count: \(result.count)")
results = result
}
但是这个函数永远不会被调用。 我之前使用过代表并且很好。或者我只是累了,不知道我做错了什么......
答案 0 :(得分:3)
在ViewController
的代码中创建SearchResultTableViewController
的地方,您必须设置代理的值:
let viewController = ViewController()
viewController.Delegate = self
// present viewController
答案 1 :(得分:0)
如果您在ViewController的SearchResultTableViewController之后显示,那么执行以下操作会更容易:
func GoToSearchResultVC(result: Any) {
let searchVC = SearchResultTableViewController()
searchVC.results = results
self.present(searchVC, animated: true, completion: nil)
}
委托设计模式是从其他类接收事件,如果你只想设置变量,这种方式对我来说更好
BTW检查您的代码,您在创建SearchResultsVC之前首先调用该委托
答案 2 :(得分:0)
是的,因为我未能管理代表工作。我喜欢Alexkater建议。