我使用代码在创建按钮时为其分配操作。 以下代码没有任何问题:
button.addTarget(self, action: didTapDot, forControlEvents: .TouchUpInside)
按钮是按钮对象,didTapDot是同一类中函数的名称,触摸按钮时该函数被激活,因此点符号可以写在屏幕上。
现在,我正在尝试制作一个通用代码,以后可以在单行代码中生成所有按钮,这些按钮的运行方式非常相似。我创建了一个名为didTap(content)的函数。现在和以前一样,我想将特定的didTapDot替换为didTap(内容)。
let tapAction = "didTap("+content+")"
let tapActionSelector = NSSelectorFromString(tapAction)
button.addTarget(self, action: tapActionSelector, forControlEvents: .TouchUpInside)
我在最长的和安全的#34;避免问题的方法。 "行动:"需要一个NSSelector,所以为了使它我首先创建了一个我想要发送的函数的String,然后我把它变成了NSSelector。
现在,Xcode仍显示0错误和0警告。我运行模拟器。键盘成功显示出来。我点击其中一个创建的按钮 - 崩溃。我不知道这里做错了什么:(
记录,这是崩溃后控制台给我的错误:
2014-10-11 14:42:43.315 AppName [7634:561153]插件gilad.AppName.Extension 2014-10-11 14:42:44.414 AppName [7634:561075] viewServiceDidTerminateWithError ::错误 Domain = _UIViewServiceInterfaceErrorDomain Code = 3"操作 无法完成。 (_UIViewServiceInterfaceErrorDomain错误3。)" UserInfo = 0x7f900ad206b0 {Message = Service Connection Interrupted}
那么,任何想法可能会出错?
答案 0 :(得分:1)
我认为这有帮助。我找到了你的问题,因为当我的键盘终止时我得到同样的错误,但我认为是无关的。无论如何,我有同样的任务。这是我的解决方案:
//didTap function
func didTap(sender:UIButton){
var proxy = textDocumentProxy as UITextDocumentProxy
proxy.insertText(sender.titleForState(.Normal)!)
}
//how to use when you set up your keyboard
button.setTitle(key.label,forState: .Normal)
button.addTarget(self, action: "didTap:", forControlEvents: .TouchUpInside)
请注意addTarget中函数名称末尾的“:”。它告诉底层框架有一个预期的参数(发送者)。
希望它有所帮助。