如何在 addTarget #Selector 中将静态参数传递给 UIRefreshControl() 的本地函数
Posted
技术标签:
【中文标题】如何在 addTarget #Selector 中将静态参数传递给 UIRefreshControl() 的本地函数【英文标题】:how to pass static parameters to a local function for UIRefreshControl() in addTarget #Selector 【发布时间】: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>)
如果我可以使用我希望发送的参数调用此本地方法,那将非常有帮助。
【问题讨论】:
***.com/questions/24814646/… ?它很旧,但由于它使用相同的addTarget()
,因此逻辑保持不变。也和 Objective-C 一样。
如果逻辑相同,请解释,因为我无法理解。
【参考方案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":""])
【讨论】:
以上是关于如何在 addTarget #Selector 中将静态参数传递给 UIRefreshControl() 的本地函数的主要内容,如果未能解决你的问题,请参考以下文章
UIControl (addTarget:action:forControlEvents:) @selector 参数
行“addTarget ...”上无法识别的选择器,如何解决?
如何在UITextField中仅为UIControlEvent.allEditingEvents覆盖addTarget?