【问题标题】:how to pass static parameters to a local function for UIRefreshControl() in addTarget #Selector如何在 addTarget #Selector 中将静态参数传递给 UIRefreshControl() 的本地函数
【发布时间】:2019-09-10 10:18:08
【问题描述】:

我在表格视图中添加了 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>) {
}

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

【问题讨论】:

  • stackoverflow.com/questions/24814646/… ?它很旧,但由于它使用相同的addTarget(),因此逻辑保持不变。也和 Objective-C 一样。
  • 如果逻辑相同,请解释,因为我无法理解。

标签: swift selector uirefreshcontrol addtarget


【解决方案1】:

您要传递的dictionary 不包含任何特定于refreshControl 的内容。

您可以在loadStatement() 方法本身中创建defaultParams dictionary,而不是尝试在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...
 }

【讨论】:

  • 实际上该方法会在不同的地方以不同的参数调用。这就是我挣扎的原因。
  • 然后尝试使用实例属性。你不能用 refreshControl 传递它。
  • 请举例说明,听不懂。
  • 您只需为 refreshControl 添加目标一次。为什么字典需要不同的值。请澄清上下文。
  • method1()有什么用?
【解决方案2】:

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

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

    @objc func loadDatas(){
          loadStatement(parameter: ["buyer_id":UserDefaults.standard.string(forKey: "UserName")!,"transaction_type":""])
     }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-17
    • 2020-04-20
    • 2019-04-25
    • 1970-01-01
    • 2012-02-21
    • 2012-07-30
    相关资源
    最近更新 更多