我尝试创建一个setupTap函数,它将一个字符串作为参数,该字符串应该是一个函数名。当在选择器中我尝试调用函数(函数的视图控制器与函数字符串名称连接)时,它将无法工作。这就是我的尝试:
func setupTap(functionName: String) {
let tap = UITapGestureRecognizer(target: self, action: MainScreenViewController().perform(NSSelectorFromString(functionName)))
settingLabel.isUserInteractionEnabled = true
settingLabel.addGestureRecognizer(tap)
}
感谢您的帮助
答案 0 :(得分:1)
通过这样做:
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))