Swift 4为什么委托不起作用

时间:2018-01-31 12:03:00

标签: ios swift delegates

在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
}

但是这个函数永远不会被调用。 我之前使用过代表并且很好。或者我只是累了,不知道我做错了什么......

3 个答案:

答案 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建议。