0

我在我的表格视图中添加了 refreshcontrol ,在下拉时,它应该调用一个以字典为参数的本地方法。但是我搜索了很多,但无法在 uirefreshcontrol 的 addTarget 中将字典作为参数发送。请帮助我以字典作为参数调用本地方法。

我尝试过的是使用 objc 并且也没有选择器,但它没有用。

let defaultParam = ["buyer_id":UserDefaults.standard.string(forKey: "UserName")!,"transaction_type":""]
    refreshControl.addTarget(self, action: "loadStatement:", for: .valueChanged)
}
func loadStatement(parameter : Dictionary<String, Any>) {
}

如果我可以使用我希望发送的参数调用此本地方法,那将非常有帮助。

4

2 回答 2

0

我找到了另一种解决方案。只需编写另一种不带参数的方法并调用它。该空方法应该使用所需的参数调用。现在很好。感谢你的关心。

    refreshControl.addTarget(self, action: #selector(loadDatas), for: .valueChanged)

    @objc func loadDatas(){
          loadStatement(parameter: ["buyer_id":UserDefaults.standard.string(forKey: "UserName")!,"transaction_type":""])
     }
于 2019-09-10T11:56:20.103 回答
0

您要传递的dictionary不包含任何特定于refreshControl.

您可以defaultParams dictionaryloadStatement() 方法本身中创建而不是尝试在refreshControl事件中传递它,即

 func loadStatement() {
    var defaultParam = [String:Any]()
    defaultParam["buyer_id"] = UserDefaults.standard.string(forKey: "UserName")
    defaultParam["transaction_type"] = ""
    //rest of the code here...
 }

或者,如果有一些依赖项,您可以改用实例属性。

编辑:

尝试使用默认参数值来使其正常工作,

override func viewDidLoad() {
    super.viewDidLoad()
    refreshControl.addTarget(self, action: #selector(loadStatement(parameter:)), for: .valueChanged)
}

func method1() {
    var params = [String:Any]()
    //....
    loadStatement(parameter: params) //called with custom params here....
}

@objc func loadStatement(parameter: [String:Any] = ["buyer_id":UserDefaults.standard.string(forKey: "UserName")!,"transaction_type":""]) {
    print(parameter)
    //rest of the code here...
 }
于 2019-09-10T10:50:56.090 回答