如果连接到视图控制器,选择器将不起作用 swift
Selector won't work if concatenated to view controller swift
我尝试创建一个 setupTap 函数,该函数获取一个字符串作为参数,该字符串应该是一个函数名称。当在选择器中我尝试调用函数(函数的视图控制器与函数字符串名称连接)时,它不起作用。这是我试过的:
func setupTap(functionName: String) {
let tap = UITapGestureRecognizer(target: self, action: MainScreenViewController().perform(NSSelectorFromString(functionName)))
settingLabel.isUserInteractionEnabled = true
settingLabel.addGestureRecognizer(tap)
}
感谢您的帮助
通过这样做:
MainScreenViewController().perform(NSSelectorFromString(functionName))
你不是在传递一个选择器,你是在直接执行一个选择器。您应该让手势识别器执行选择器。
事实上,swift 具有创建选择器的这种很酷的语法:
#selector(someFunc)
它不使用任何字符串文字,因此编译时会检查拼写错误!
你的 setupTap
函数应该是这样的:
func setupTap(selector: Selector) {
let tap = UITapGestureRecognizer(target: self, action: selector)
settingLabel.isUserInteractionEnabled = true
settingLabel.addGestureRecognizer(tap)
}
这样称呼:
setupTap(selector: #selector(someFunc))
我尝试创建一个 setupTap 函数,该函数获取一个字符串作为参数,该字符串应该是一个函数名称。当在选择器中我尝试调用函数(函数的视图控制器与函数字符串名称连接)时,它不起作用。这是我试过的:
func setupTap(functionName: String) {
let tap = UITapGestureRecognizer(target: self, action: MainScreenViewController().perform(NSSelectorFromString(functionName)))
settingLabel.isUserInteractionEnabled = true
settingLabel.addGestureRecognizer(tap)
}
感谢您的帮助
通过这样做:
MainScreenViewController().perform(NSSelectorFromString(functionName))
你不是在传递一个选择器,你是在直接执行一个选择器。您应该让手势识别器执行选择器。
事实上,swift 具有创建选择器的这种很酷的语法:
#selector(someFunc)
它不使用任何字符串文字,因此编译时会检查拼写错误!
你的 setupTap
函数应该是这样的:
func setupTap(selector: Selector) {
let tap = UITapGestureRecognizer(target: self, action: selector)
settingLabel.isUserInteractionEnabled = true
settingLabel.addGestureRecognizer(tap)
}
这样称呼:
setupTap(selector: #selector(someFunc))