我在学习Swift的同时尝试制作自定义键盘。在我的键盘上,每个键都是一个单独的UIView,其中包含UILabel。每个UILabel的标签均为1。起初,我手动编码了每个键的输入,但是我决定优化代码并设置一个函数,该函数将UILabel的文本设置为输入,但由于某种原因键盘崩溃了(没有日志)
注意1:显示了一个按键以简化操作。
注意2:该手势在其他位置定义,不会导致崩溃
这是我的代码:
override func viewDidLoad() {
super.viewDidLoad()
var Qkey = UIView(frame: CGRectMake(3, 11, 26, 38))
var Q = UILabel(frame: CGRectMake(5, 8, 17, 27))
Q.tag = 1
Q.text = "Q"
Qkey.addSubview(Q)
tapRec1.addTarget(self, action: "keyPressed:")
Qkey.addGestureRecognizer(tapRec1)
self.view.addSubview(Qkey)
}
func keyPressed(sender: UIView){
let theLabel : UILabel! = sender.viewWithTag(1) as UILabel;
var string = theLabel.text!
(textDocumentProxy as UIKeyInput).insertText("\(theLabel)")
}
在日志中观察到错误:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITapGestureRecognizer viewWithTag:]: unrecognized selector sent to instance 0x798bba30'
本质上,我想做的是针对调用了该函数的UIView(发送者),获取带有标签1的所有子视图(UILabel),并将其文本设置为键盘输入。即使在按键崩溃时也可以这样做:(非常感谢您的帮助。谢谢!
终于明白了。这是工作代码:
func keyPressed(sender: UITapGestureRecognizer){
for subview in sender.view!.subviews as [UIView] {
if subview.tag == 1
{
let label = subview as UILabel
if capsLockOn {
(textDocumentProxy as UIKeyInput).insertText("\(label.text!.uppercaseString)")
} else {
(textDocumentProxy as UIKeyInput).insertText("\(label.text!.lowercaseString)")
}
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句